刚接触mysql,很容易被mysqld,mysqld_safe,mysql.server,mysqladmin,mysql,service mysql弄晕
他们是命令、进程、服务、程序、脚本
最近学习了一下,说说自己的理解
1 mysql命令
mysql是客户端命令,用于连接mysql数据库
只要安装完mysql就会有的命令
比如
mysql -uroot -poracle
2 mysqld
mysqld是mysql服务器进程,也是管理mysql服务端的命令。
进程:
[root@lzl ~]# ps -ef|grep 3306
mysql 8626 1 0 01:12 ? 00:00:21 /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql.log --pid-file=/data/mysql/mysqld.pid --socket=/tmp/mysql.sock --port=3306
命令:
[root@lzl ~]# which mysqld
/usr/local/mysql/bin/mysqld
mysqld命令可以用于初始化(--initialize)或者启动mysql服务
mysqld shutdown -P$port -h$host可以关闭数据库
一般mysql服务((mysql服务一般指的实体就是mysqld的进程本身,mysqld向外提供mysql服务)启动后,就包含2个进程:mysqld和mysqld_safe。
mysqld是mysql服务器进程,也就是mysql实例本身,如果mysqld进程不在了,就可以看成mysql实例挂了
mysqld_safe相当于是mysqld外面的安全管理进程。一个mysql实例可以没有mysqld_safe进程但是至少有一个mysqld进程
用service启动一般会启动mysqld和mysqld_safe两个进程
3 mysqld_safe
mysqld_safe是mysqld_safe进程,也是mysqld_safe的命令。
mysqld_safe命令可以通过mysqld_safe进程用来启动mysqld。mysqld_safe有许多安全特性,比如当出现错误时重启服务器并向错误日志文件写入运行时间信息,mysqld和mysqld_safe参数相似(但是仍有部分不同),mysqld_safe指定的参数会传递给mysqld。启动mysql实例时建议使用mysqld_safe命令去启动,当mysqld挂掉后mysqld_safe会自动把他拉起来
例如启动mysqld_safe,同时也拉起了mysqld。在杀进程的时候最好先杀mysqld_safe,再杀mysqld,不然mysqld_safe会把mysqld拉起来
通过mysqld_safe启动mysqld_safe和mysqld:
[root@lzl ~]# mysqld_safe start --defaults-file=/etc/my.cnf &
[1] 5944
[root@lzl ~]# 2020-07-28T06:22:40.324571Z mysqld_safe Logging to '/data/mysql/mysql.log'.
2020-07-28T06:22:40.350801Z mysqld_safe Starting mysqld daemon with databases from /data/mysql --启动了mysqld
2020-07-28T06:22:42.426844Z mysqld_safe mysqld from pid file /data/mysql/mysqld.pid ended -只要出现了/xxx/xxx/.pid ended 就表示没有启动成功,它退出了
mysqld_safe start 虽然可以拉起mysqld
但是mysqld_safe shutdown只能关闭mysqld_safe自己
4 mysqld_multi
mysqld_multi可以管理多个mysql的服务,管理多个mysql实例时比较有用,目前我的接触的环境还没有使用该功能。个人认为没有各自为战的mysqld灵活,mysqld启动时指定各自的my.cnf,也可以多个服务同时存在。云服务调用时也更方便灵活一些,至少肯定不会影响到其他mysql服务
5 mysql.server与service mysql start
mysql.server 是mysql启动脚本,一般会拷贝到/etc/init.d/文件夹下,拷贝成/etc/init.d/mysql后可以通过service mysql start|stop 来启动或者关闭mysqld和mysqld_safe服务,很方便
cp -r /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
如果使用service start mysql启动mysql实例的话,一切都是默认的,他会去读/etc/my.cnf配置去启动mysql实例。
但是当我仅想启动3307端口的实例不想启动3306时,启动脚本就没有那么好用
mysql.server启动脚本的特长就是方便,缺点是不够灵活
6 mysqladmin
mysqladmin是一个执行管理操作的客户程序。可以用它来检查服务器的配置和当前的状态,创建并删除数据库等等
比如查看实例状态
[root@lzl ~]# mysqladmin proc stat -uroot -poracle (mysqladmin proc stat相当于mysqladmin status和mysqladmin processlist的合体)
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
+----+------+-----------+----+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+----+---------+------+----------+------------------+
| 17 | root | localhost | | Query | 0 | starting | show processlist |
+----+------+-----------+----+---------+------+----------+------------------+
Uptime: 321960 Threads: 1 Questions: 16 Slow queries: 0 Opens: 106 Flush tables: 2 Open tables: 1 Queries per second avg: 0.000
有个比较有意思的命令shutdown(没有startup)
[root@lzl mysql]# mysqladmin shutdown -P3306 -uroot -poracle
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
2020-07-28T07:14:13.481049Z mysqld_safe mysqld from pid file /data/mysql/mysqld.pid ended
[1]+ Done mysqld_safe --defaults-file=/etc/my.cnf (wd: ~)
(wd now: /data/mysql)
确实可以停实例,启动实例还是用mysqld_safe比较好