25 Dec
2015
25 Dec
'15
1:33 p.m.
Hi, Context: ----------- Version: MariaDB 10.0 Repo: http://yum.mariadb.org/10.0/centos7-amd64 OS: CentOS Linux release 7.2.1511 Kernel: 3.10.0-229.7.2.el7.x86_64 Cloud Provider: Windows Azure I run a three-node MariaDB-Galera cluster on production for my company. With the custom config file at: */etc/my.cnf.d/server.cnf* My datadisk is mounted over a lvm2 partition over two physical volumes, mounted on the path. */datadrive/galera/mysql* The logical volume only takes up 50% of the volume group as I leave the empty space for snapshot operations. This is reflected in my configuration as: *[mysqld]* *datadir = /datadrive/galera/mysql * *socket = /datadrive/galera/mysql/mysql.sock * Issue: -------- Coming to the issue at hand; When starting the primary component through: *$ sudo service mysql bootstrap* or, *$ sudo service mysqld start --wsrep-new-cluster* ( Essentially same, as bootstrap differs to *start --wsrep_new_cluster *) The bootstrap sequence correctly calls mysqldsafe, as below */usr/bin/mysqld_safe --datadir=/datadrive/galera/mysql --pid-file=/datadrive/galera/mysql/ciq-test-db01.pid --wsrep-new-cluster* However, it then gets stuck in the *wait_for_ready() function of /etc/init.d/mysql* The sequence tries to ping mysqladmin through: * if $bindir/mysqladmin ping >/dev/null 2>&1; then* *log_success_msg* * return 0* *elif kill -0 $! 2>/dev/null ; then* * : # mysqld_safe is still running* *else* * # mysqld_safe is no longer running, abort the wait loop* * break* It gets stuck here as the test: * if $bindir/mysqladmin ping >/dev/null 2>&1; then* Always fails and the counter keeps increasing till 900 and Error's out with the *log_failure_msg* *return 1* Test: I tested that line from the console as: *$mysqladmin ping >dev/null 2>&1* and, was thrown the following error: *mysqladmin: connect to server at 'localhost' failed* *error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2 "**No such file or directory")'* *Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!* Obviously, '*/var/lib/mysql' *does not exist in my setup, and the socket file was at *'/datadrive/galera/mysql/mysql.sock'* But, my socket can be passed explicitly to *mysqladmin *by doing, *$mysqladmin --socket=**/datadrive/galera/mysql/mysql.sock ping* This actually worked as expected and I got the desired output, *mysqld is alive* Solution: ----------- What I surmised through my novice abilities was that the init script was not passing the variables it read from */etc/my.cnf.d/server.cnf to mysqladmin* So, for now I have done a hackjob by altering the init script function wait_for_ready() with the test: *if $bindir/mysqladmin --socket=/datadrive/galera/mysql/mysql.sock ping >/dev/null 2>&1; then* * log_success_msg* * return 0* And voila, *$ sudo service mysql start* *$ sudo service mysql start --wsrep-new-cluster* *$ sudo service mysql bootstrap* All above works. It is evident that I should be passing all the variables from */etc/my.cnf.d/server.cnf *that *mysqladmin *needs to set it's environement correctly. However I think that this could be / should be done on the pre-distributed init script itself rather than a user-side hack. While I have tried to be thorough in my inspection of the issue, I may have missed either something very basic or inherently complex that's currently is inherent to the process of initializing the mysql service. Please redirect me to a corrected course if that is the case. P.S. First time post in the list, I may have stated things unacceptably P.P.S. Merry Christmas to you all. Thanks and regards, Joy Bhattacherjee Mob: +91-9011235028