Reply
New Contributor
Posts: 5
Registered: ‎11-02-2018

scm_prepare_database.sh unable to find MySQL JDBC driver

Hello,

 

I was going through the Deploying CDH on Microsoft Azure Using Cloudera Manager & Azure Marketplace course, at the "Path B: Deploying Cloudera Manager for a Production Grade Cluster", but i am unable to finish th installation due to the bellow error:

"JAVA_HOME=/usr/java/jdk1.8.0_191-amd64
Verifying that we can write to /etc/cloudera-scm-server
[ main] DbProvisioner ERROR Unable to find the MySQL JDBC driver. Please make sure that you have installed it as per instruction in the installation guide.
[ main] DbProvisioner ERROR Stack Trace:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)[:1.8.0_191]
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)[:1.8.0_191]
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:349)[:1.8.0_191]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)[:1.8.0_191]
at java.lang.Class.forName0(Native Method)[:1.8.0_191]
at java.lang.Class.forName(Class.java:264)[:1.8.0_191]
at com.cloudera.enterprise.dbutil.DbProvisioner.executeSql(DbProvisioner.java:283)[db-common-5.15.1.jar:]
at com.cloudera.enterprise.dbutil.DbProvisioner.doMain(DbProvisioner.java:104)[db-common-5.15.1.jar:]
at com.cloudera.enterprise.dbutil.DbProvisioner.main(DbProvisioner.java:123)[db-common-5.15.1.jar:]
--> Error 1, giving up (use --force if you wish to ignore the error)" 

 

I have done everything according to the tutorial videos, also checked user rights, tables, database, but the command will not work. After i run the below command, i receive the above error.

 

"/usr/share/cmf/schema/scm_prepare_database.sh mysql -h mysql -utemp -ptemp --scm-host clouderamanager scm scm_user scm_pwd"

 

The only differences between my setup and the one from the video, is that i use Java 8u191instead of Java 8u171, and my MySQL database is called mysql and not mysqlh.

 

Any advice?

Thank you!

 

 

Master
Posts: 430
Registered: ‎07-01-2015

Re: scm_prepare_database.sh unable to find MySQL JDBC driver

The error indicates your server does not have a jdbc driver. Try to install mysql on your host, it should deploy the JDBC driver. For example on Redhat/Centos:

sudo yum -y install mysql-connector-java

Then your driver is located here:

/usr/share/java/mysql-connector-java.jar

New Contributor
Posts: 5
Registered: ‎11-02-2018

Re: scm_prepare_database.sh unable to find MySQL JDBC driver

Hi,

 

I have done as per the instructons (from course Configuring a MySQL Database for Your Environment), and i have downloaded the driver from "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz", and then:

"mkdir -p /usr/share/java/

tar zxvf mysql-connector-java-5.1.46.tar.gz

cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar /usr/share/java/mysql-connector-java.jar"

 

Is there anything else i might have forgotten? 

Thank you!

 

 

Master
Posts: 430
Registered: ‎07-01-2015

Re: scm_prepare_database.sh unable to find MySQL JDBC driver

Hi,

 I think installing it via system package manager is a better solution, but in your case I miss a command to change PATH variable. So basically you downloaded, extracted the jdbc driver, but it is not visible. Make it visible system wide by changing your env variables, or put this jdbc driver into a directory where you PATH is pointing to.

 

New Contributor
Posts: 5
Registered: ‎11-02-2018

Re: scm_prepare_database.sh unable to find MySQL JDBC driver

Hi,

Strange is that i did it all according to the tutorial, but i think i have forgoten to put the Java connector in all nodes, that includes the cloudera manager VM. Now that i have done the same on the cloudera VM, as on the MySQL VM, and run again the prepare database, i get a different error:

"

JAVA_HOME=/usr/java/jdk1.8.0_191-amd64
Verifying that we can write to /etc/cloudera-scm-server
[ main] DbProvisioner ERROR Exception when creating/dropping database with user 'temp' and jdbc url 'jdbc:mysql://mysql/?useUnicode=true&characterEncoding=UTF-8'
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)[:1.8.0_191]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)[:1.8.0_191]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)[:1.8.0_191]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)[:1.8.0_191]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)[mysql-connector-java.jar:5.1.46]
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:990)[mysql-connector-java.jar:5.1.46]
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:342)[mysql-connector-java.jar:5.1.46]
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2188)[mysql-connector-java.jar:5.1.46]
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2221)[mysql-connector-java.jar:5.1.46]
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2016)[mysql-connector-java.jar:5.1.46]
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:776)[mysql-connector-java.jar:5.1.46]
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)[mysql-connector-java.jar:5.1.46]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)[:1.8.0_191]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)[:1.8.0_191]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)[:1.8.0_191]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)[:1.8.0_191]
at com.mysql.jdbc.Util.handleNewInstance(Util.java:425)[mysql-connector-java.jar:5.1.46]
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:386)[mysql-connector-java.jar:5.1.46]
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:330)[mysql-connector-java.jar:5.1.46]
at java.sql.DriverManager.getConnection(DriverManager.java:664)[:1.8.0_191]
at java.sql.DriverManager.getConnection(DriverManager.java:247)[:1.8.0_191]
at com.cloudera.enterprise.dbutil.DbProvisioner.executeSql(DbProvisioner.java:296)[db-common-5.15.1.jar:]
at com.cloudera.enterprise.dbutil.DbProvisioner.doMain(DbProvisioner.java:104)[db-common-5.15.1.jar:]
at com.cloudera.enterprise.dbutil.DbProvisioner.main(DbProvisioner.java:123)[db-common-5.15.1.jar:]
[ main] DbProvisioner ERROR Stack Trace:
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

--> Error 1, giving up (use --force if you wish to ignore the error)"

 

Master
Posts: 430
Registered: ‎07-01-2015

Re: scm_prepare_database.sh unable to find MySQL JDBC driver

You have something definitely wrong in the configuration:
Is the host running the mysql database called really "mysql" ? (Because your JDBC connect string looks like this).

Can you do the following:
Get the MYSQL server hostname
Get the MYSQL root username and password
And try from every host:
mysql -h <MYSQLHOSTNAME> -u <ROOTUSER> -p

If you are able to connect, then your database is accesible from every node.
New Contributor
Posts: 5
Registered: ‎11-02-2018

Re: scm_prepare_database.sh unable to find MySQL JDBC driver

I am sure that i did something wrong. My VM running the MySQL, the host is called "mysql", it was installed and root credentials were given by me.

When trying to run the "mysql -h mysql -u root -p" i get the "-bash: mysql: command not found".

Where did i go wrong? because i did the same things as in the tutorials :( 

 

New Contributor
Posts: 5
Registered: ‎11-02-2018

Re: scm_prepare_database.sh unable to find MySQL JDBC driver

Hi,

 

After further troubleshooting and testing different scenarios, i managed to fix the issue. First i replaced the temp user with root user, the mysql hostname with the IP address, but this still did not work. As a solution, on the MySQL machine, i ran the bellow command:

 

"grant all privileges on *.* TO 'root'@'%' identified by 'password' with grant option;Flush privileges;"

 

After that, the command "/usr/share/cmf/schema/scm_prepare_database.sh mysql -h IPADDRESS -uroot -p --scm-host clouderamanager scm scm_user scm_pwd" worked and now the service is up and running.

 

Thank you for the assistance!