← Back to team overview

maria-discuss team mailing list archive

Re: MariaDB init.d Script Probable Bug in wait_for_ready()

 

Hi Joy, 

You can create your own client.cnf under /etc/my.cnf.d/ 
But a [client]  section should already exits under some of the files inside my.cnf.d  

If none it will search for the default at compile time very OS dependent.   
   
Hope it helps
/stephane 
Stéphane Varoqui, Senior Consultant
Phone: +33 695-926-401, skype: svaroqui
http://www.mariadb.com

Le Dec 25, 2015 à 7:11 PM, Joy Bhattacherjee a écrit :

> Hi,
> 
> I know that fact,
> however in default MariaDB settings my. cnf points to !/etc/my.cnf.d/
> where server.cnf resides. Also do note that 
> /etc/my.cnf.d/server.cnf by default stores the configuration for the node.
> 
> Also, MySQL init script reads the correct configurations, but does not pass them on to mysqladmin, while calling it from within the init script.
> 
> While I do agree an explicit out of environment call to mysqladmin should default to /etc/my.cnf, however if being called from another script it should inherit the environment of its calling script.
> 
> 
> On Fri, Dec 25, 2015, 9:51 PM Nirbhay Choubey <nirbhay@xxxxxxxxxxx> wrote:
> Hi Joy!
> 
> On Fri, Dec 25, 2015 at 6:33 AM, Joy Bhattacherjee <joy.bhattacherjee@xxxxxxxxx> wrote:
> 
> .. cut .. 
> 
> 
> This is reflected in my configuration as:
> 
> [mysqld]
> datadir = /datadrive/galera/mysql 
> socket = /datadrive/galera/mysql/mysql.sock 
> 
> You also need to set socket for your client tools. (mysqladmin --print-defaults)
> 
> $ mysqladmin --help | grep -A2 ^Default
> Default options are read from the following files in the given order:
> /etc/my.cnf ~/.my.cnf 
> The following groups are read: mysqladmin client client-server client-mariadb
> 
> Best,
> Nirbhay
>  
> 
> 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
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~maria-discuss
> Post to     : maria-discuss@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~maria-discuss
> More help   : https://help.launchpad.net/ListHelp
> 
> 
> _______________________________________________
> Mailing list: https://launchpad.net/~maria-discuss
> Post to     : maria-discuss@xxxxxxxxxxxxxxxxxxx
> Unsubscribe : https://launchpad.net/~maria-discuss
> More help   : https://help.launchpad.net/ListHelp


References