why the mysqld is located in 4 places in linux system? - mysql

I have confusion while I'm execute the command "# find / -name mysqld". Because the mysqld is located in four places which are:
/usr/libexec/mysqld
/etc/rc.d/init.d/mysqld
/var/lock/subsys/mysqld
/var/run/mysqld
What is the purpose of another three mysql daemons?

Here is the following explanations
/usr/libexec/mysqld : The actual binary executable
/etc/rc.d/init.d/mysqld : The service startup file (text file)
/var/run/mysqld : PID/run file folder (mysqld writes a run file in this folder)
/var/lock/subsys/mysqld : not sure
If you run which mysqld you should see the first one
You never run that directly
When you run service mysqld start, it calls /etc/rc.d/init.d/mysqld to kickoff a program called mysqld_safe (Run which mysqld_safe). mysqld_safe and mysqld work together to be the server daemon.
In turn, mysqld_safe will kickoff mysqld and then checks for an exit code. You can run less /etc/rc.d/init.d/mysqld and see this. If mysqld did not end due to system shutdown or a normal service mysql stop, mysqld_safe will attempt to restart mysqld.

Related

It will be terminated immediately when installing MYSQL in AIX

After running mysql_install_db in mysql/scripts, I ran mysqld_safe, and the following error appeared.
220329 00:08:10 mysqld_safe Logging to '/home/ts_dist/mysql57/data/daenerys.err'.
220329 00:08:10 mysqld_safe Starting mysqld daemon with databases from /home/ts_dist/mysql57/data
220329 00:08:11 mysqld_safe mysqld from pid file /home/ts_dist/mysql57/data/daenerys.pid ended
MySQL is tar.The gz file was moved to the corresponding directory and decompressed, and it was not installed with the rpm command.
Is it a problem that can occur during this process?

mysqld_multi error during start

hy guys,
i had a problem with mysqld_multi since 2 days.
I had to run fsck because i had a problem with the hard drive after this i encounter this issue.
When i try to start mysqld_multi with verbose i receive this error:
WARNING: mysqld_safe is beign used to start mysql. In this case you may need to pass "ledir=..." under groups [mysqldN] to mysqld_safe in order to find the actual mysqld binary. ledir (library executable directory) should be the path to the wanted mysqld binary.
This is my my.cnf
[mysqld_multi]
mysqld=/usr/bin/mysqld_safe
mysqladmin=/usr/bin/mysqladmin
log=/var/log/mysqld_multi.log
user=multi_admin
password=secret
[mysqld1]
port=1111
datadir=/var/lib/mysql-databases/mysqld1
pid-file=/var/lib/mysql-databases/mysqld1/mysql.pid
socket=/var/lib/mysql-databases/mysqld1/mysql.sock
user=mysql
server-id=1111
relay-log=/var/log/mysql1/mysql-relay-bin.log
log_bin=/var/log/mysql1/mysql-bin.log
binlog_do_db=database1
i hope somebody could help me
thanks
First, you need to find the mysqld file location.
[root#xyz ~]# find / -name mysqld
/usr/libexec/mysqld
[root#xyz ~]#
Then you need just to add the following lines to your my.cnf file.
[mysqld_multi]
mysqld=/usr/bin/mysqld_safe
mysqladmin=/usr/bin/mysqladmin
log=/var/log/mysqld_multi.log
user=multi_admin
password=secret
[mysqld1]
port=1111
datadir=/var/lib/mysql-databases/mysqld1
pid-file=/var/lib/mysql-databases/mysqld1/mysql.pid
socket=/var/lib/mysql-databases/mysqld1/mysql.sock
user=mysql
server-id=1111
relay-log=/var/log/mysql1/mysql-relay-bin.log
log_bin=/var/log/mysql1/mysql-bin.log
binlog_do_db=database1
mysqld=mysqld_safe ---> only script name of mysqld_safe
ledir=/usr/libexec --> location of mysqld file

mysql : sudo mysqld_safe --skip-grant-tables & hangs

I have accidentally deleted all mysql users and hence not able to access any database.
i am using http://www.kevssite.com/2011/07/02/deleted-rootlocalhost-account-in-mysql/ link to recreate root user account again.
but the problem is that whenever I issue command sudo mysqld_safe --skip-grant-tables & my scripts hangs forever. because of this i am not able to follow next steps mentioned in the above given link.
mysqld_safe Can't log to error log and syslog at the same time. Remove all --log-error configuration options for --syslog to take effect.
151130 18:17:51 mysqld_safe Logging to '/var/log/mysql/error.log'.
151130 18:17:51 mysqld_safe A mysqld process already exists
Make sure to kill mysqld first before running mysqld_safe:
killall mysqld mysqld_safe
# give it 10 seconds or so to shut down cleanly
ps aux | grep mysqld
# if you still see mysqld, more violent action might be needed,
# but it might
# corrupt your data. But if it a test or empty install, no problem
killall -9 mysqld mysqld_safe
# now mysqld_safe should start
And you should also remove either syslog or log-error from my.cnf to address the complaint in the first error message from mysqld_safe.

mysql amazon ec2 "Can't create test file" error

I'm running on EC2, and want to have MYSQL's datadir on another EBS. I mounted the EBS (ext3) on /data and changed the datadir in my.cnf to point to that dir. However, when I try to start mysql, I get this error:
120518 03:53:17 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
120518 03:53:28 mysqld_safe Starting mysqld daemon with databases from /data/mysql/
120518 3:53:28 [Warning] Can't create test file /data/mysql/ip-10-136-23-225.lower-test
120518 3:53:28 [Warning] Can't create test file /data/mysql/ip-10-136-23-225.lower-test
/usr/libexec/mysqld: Can't change dir to '/data/mysql/' (Errcode: 13)
120518 3:53:28 [ERROR] Aborting
120518 3:53:28 [Note] /usr/libexec/mysqld: Shutdown complete
120518 03:53:28 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
Any ideas?
If you are running on a distro like Ubuntu, then AppArmor is probably blocking mysqld from being able to access files in a different directory. If you check your system log files, you'll find a cryptic error message to this effect.
Solutions include:
Disable AppArmor (not recommended)
Edit the AppArmor rules (complicated)
Use "mount bind" to make MySQL think that your data files are in the original location while they are actually over on the EBS volume. Revert your changes to datadir.
I wrote an article for Amazon years back describing community best practices for exactly what you are trying to do including commands for the mount bind example:
Running MySQL on Amazon EC2 with EBS
http://ec2ebs-mysql.notlong.com
Note that the AMI id in the article is old. Using a modern Ubuntu AMI, you'll need to replace /dev/sdh with /dev/xvdh in the mkfs.xfs and /etc/fstab (but not in the ec2 tools command lines).
If you're running Ubuntu, you can run into this error due to the apparmor service. To get around this. To get around it, you need to do the following:
1) Edit '/etc/apparmor.d/usr.sbin.mysqld' and add these lines:
/opt/lib/mysql/ r,
/opt/lib/mysql/** rwk,
( assuming your new data directory is in /opt/lib/mysql )
2) re-start the apparmor service:
sudo service apparmor restart
Change owner of /data directory to mysqld process owner (chown owner /data ). or (chmod 777 -R /data) very unsafe.

Timeout error occurred trying to start MySQL Daemon. CentOS 5

I ran into troubles with MySQL on my CentOS.
I had some problems and backed up my database and removed mysql with all dependencies.
After that I ran reinstalled:
yum groupinstall "MySQL Database"
Installed without errors.
Running the mysql daemon:
service mysqld start
Timeout error occurred trying to start MySQL Daemon.
Starting MySQL: [FAILED]
I also ran
# /usr/bin/mysql_install_db --user=mysql
Installing MySQL system tables...
120112 1:49:44 [ERROR] Error message file '/usr/share/mysql/english/errmsg.sys' had only 480 error messages,
but it should contain at least 481 error messages.
Check that the above file is the right version for this program!
120112 1:49:44 [ERROR] Aborting
Installation of system tables failed!
Examine the logs in /var/lib/mysql for more information.
You can try to start the mysqld daemon with:
/usr/libexec/mysqld --skip-grant &
and use the command line tool
/usr/bin/mysql to connect to the mysql
database and look at the grant tables:
shell> /usr/bin/mysql -u root mysql
mysql> show tables
Try 'mysqld --help' if you have problems with paths. Using --log
gives you a log in /var/lib/mysql that may be helpful.
The latest information about MySQL is available on the web at
http://www.mysql.com
Please consult the MySQL manual section: 'Problems running mysql_install_db',
and the manual section that describes problems on your OS.
Another information source is the MySQL email archive.
Please check all of the above before mailing us!
And if you do mail us, you MUST use the /usr/bin/mysqlbug script!
Checking the logs:
less /var/log/mysqld.log
Log file is empty. I don't even know how to debug it and not sure what to do.
Any recommendations?
Thank you
I know you asked this a long time ago, but since people who search for "Timeout error occurred trying to start MySQL Daemon." may end up here, there are several possible solutions to that error. Here are some of them:
First, instead of running service mysqld start or service mysqld restart try running:
$ service mysqld stop; mysqld_safe &
There are known problems with the mysqladmin lines in the /etc/init.d/mysqld script.
If this isn't working, try the following things: check if there is enough free disk space (especially in /var):
$ df -h
Check for possible error messages in these files (not all of them may exist):
# tail -n 30 /var/log/messages
# tail -n 30 /var/log/mysqld.log
# tail -n 30 /var/lib/mysql/*.err
# tail -n 30 /var/log/mysql/error.log
Next up, make sure that /etc/my.cnf uses...
socket=/var/lib/mysql/mysql.sock
...and that the directory /var/lib/mysql/ actually exists.
Set the correct permissions and ownerships:
# chown -R mysql.mysql /var/lib/mysql/
# chmod g+w /var/run/mysqld/
# chgrp mysql /var/run/mysqld/
Still not working? Try changing the bind-address in my.cnf to 127.0.0.1 or 0.0.0.0, or comment out that line.
If you're still out of luck, search for more information about mysql_install_db and since your InnoDB database may be broken also look into set-variable=innodb_force_recovery=6.
Hey sometimes it's because you ran out of disk space... so run a cursory df -h to be sure! (This JUST happened to me :P).
Before starting the mysql server rename files /var/lib/mysql/ib_logfile0 and /var/lib/mysql/ib_logfile0 then restart the server
in linux/unix
mv /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile0_old
mv /var/lib/mysql/ib_logfile1 /var/lib/mysql/ib_logfile1_old
then
service mysqld restart
In my case the cause was that i set key_buffer_size in /etc/my.cnf when i commented it out, mysqld started ok.
Try This:
rm $(grep socket /etc/my.cnf | cut -d= -f2) && service mysqld start