MySQL systemd on Linux 7

過去在Linux 6系列上用tar包安裝MySQL,要設定成系統服務很簡單,只要把mysql.server放在/etc/init.d裡面即可:
  1. cp support-files/mysql.server /etc/init.d/mysqld


但在Linux 7系列中service的角色已被systemd給取代(雖然service還是能用),但要設開機自動啟動chkconfig就會有問題:
  1. [root@mysql-course support-files]# chkconfig --list mysqld
  2.  
  3. Note: This output shows SysV services only and does not include native
  4. systemd services. SysV configuration data might be overridden by native
  5. systemd configuration.
  6.  
  7. If you want to list systemd services use 'systemctl list-unit-files'.
  8. To see services enabled on particular target use
  9. 'systemctl list-dependencies [target]'.

所以可以的話,我還是盡量設法弄成Linux 7相容的方式比較好
看了手冊的教學:https://dev.mysql.com/doc/refman/5.7/en/server-management-using-systemd.html
實在是太高深莫測了,我功力還不到家,看不太懂阿
後來看這篇http://superuser.com/questions/384365/systemctl-enable-differs-from-systemctl-start-how的說明,試做一下:
  1. [root@mysql-course ~]# systemctl status mysqld.service
  2. mysqld.service
  3. Loaded: not-found (Reason: No such file or directory)
  4. Active: inactive (dead)
  5.  
  6. [root@mysql-course ~]# vim /etc/systemd/system/mysqld.service
  7. [Unit]
  8. Description=MySQL Server
  9. After=network.target
  10. After=syslog.target
  11.  
  12. [Install]
  13. WantedBy=multi-user.target
  14.  
  15. [Service]
  16. User=mysql
  17. Group=mysql
  18. Type=forking
  19. PermissionsStartOnly=true
  20. ExecStart=/opt/percona57/bin/mysql.server start
  21. ExecStop=/opt/percona57/bin/mysql.server stop
  22. Restart=on-failure
  23. RestartPreventExitStatus=1
  24. PrivateTmp=false
  25.  
  26. [root@mysql-course ~]# systemctl daemon-reload
  27. [root@mysql-course ~]# systemctl status mysqld.service
  28. mysqld.service - MySQL Server
  29. Loaded: loaded (/etc/systemd/system/mysqld.service; disabled)
  30. Active: inactive (dead)
  31.  
  32. [root@mysql-course ~]# systemctl enable mysqld.service
  33. ln -s '/etc/systemd/system/mysqld.service' '/etc/systemd/system/multi-user.target.wants/mysqld.service'
  34. [root@mysql-course ~]# systemctl start mysqld.service
  35. [root@mysql-course ~]# systemctl status mysqld.service
  36. mysqld.service - MySQL Server
  37. Loaded: loaded (/etc/systemd/system/mysqld.service; enabled)
  38. Active: active (running) since Thu 2016-09-29 17:36:57 CST; 7s ago
  39. Process: 2858 ExecStart=/opt/percona57/bin/mysql.server start (code=exited, status=0/SUCCESS)
  40. Main PID: 2873 (mysqld_safe)
  41. CGroup: /system.slice/mysqld.service
  42. ├─2873 /bin/sh /opt/percona57/bin/mysqld_safe --datadir=/opt/percona57/data --pid-file=/opt/percona57/data/...
  43. └─3656 /opt/percona57/bin/mysqld --basedir=/opt/percona57 --datadir=/opt/percona57/data --plugin-dir=/opt/p...
  44.  
  45. Sep 29 17:36:57 mysql-course mysql.server[2858]: Starting MySQL (Percona Server).... SUCCESS!
  46. Sep 29 17:36:57 mysql-course systemd[1]: Started MySQL Server.
  47.  
  48. [root@mysql-course ~]# systemctl is-enabled mysqld.service
  49. enabled
  50. [root@mysql-course ~]# systemctl is-active mysqld.service
  51. active

這樣就算是設定好啦,可以測試看看直接以systemctl指令開關MySQL
  1. [root@mysql-course ~]# systemctl stop mysqld.service
  2. [root@mysql-course ~]# systemctl is-active mysqld.service
  3. inactive
  4. [root@mysql-course ~]# systemctl start mysqld.service
  5. [root@mysql-course ~]# systemctl is-active mysqld.service
  6. active
  7. [root@mysql-course ~]# systemctl restart mysqld.service
  8. [root@mysql-course ~]# systemctl is-active mysqld.service
  9. active

看文章裡有的人是直接用mysqld來設為ExecStart的指令,實際測試後也是能正常啟用:
  1. [root@mysql-course ~]# vim /etc/systemd/system/mysqld.service
  2. ExecStart=/opt/percona57/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/opt/percona57/data --socket=/tmp/mysql.sock
  3. #ExecStart=/opt/percona57/bin/mysql.server start
  4. #ExecStop=/opt/percona57/bin/mysql.server stop
  5.  
  6. [root@mysql-course percona57]# vim /etc/systemd/system/mysqld.service
  7. [root@mysql-course percona57]# systemctl daemon-reload
  8. [root@mysql-course percona57]# systemctl start mysqld.service
  9.  
  10. ^C -->每次都會卡在這裡,都要用crtl+c離開很困擾阿
  11. [root@mysql-course percona57]# systemctl status mysqld.service
  12. mysqld.service - MySQL Server
  13. Loaded: loaded (/etc/systemd/system/mysqld.service; enabled)
  14. Active: activating (start) since Thu 2016-09-29 17:59:05 CST; 26s ago
  15. Control: 7103 (mysqld)
  16. CGroup: /system.slice/mysqld.service
  17. └─7103 /opt/percona57/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/opt/percona57/data --socket=/tmp/my...
  18.  
  19. [root@mysql-course percona57]# systemctl stop mysqld.service
  20. [root@mysql-course percona57]# systemctl status mysqld.service
  21. mysqld.service - MySQL Server
  22. Loaded: loaded (/etc/systemd/system/mysqld.service; enabled)
  23. Active: inactive (dead) since Thu 2016-09-29 18:01:21 CST; 1s ago
  24. Process: 7167 ExecStart=/opt/percona57/bin/mysqld --defaults-file=/etc/my.cnf --datadir=/opt/percona57/data --socket=/tmp/mysql.sock& (code=exited, status=0/SUCCESS)


總結:
跟官方手冊的內容相比,這個設定過程很簡單,但不知道未來實際執行上會不會有什麼問題
另外就是設定mysqld的那個雖然也可以啟動和關閉,但看那個狀態是Active: activating (start)而不是active (running)就不是很舒服阿~~~
我個人還是習慣用mysql.server的這個腳本來當作啟動服務。

留言

這個網誌中的熱門文章

MySQL監控軟體MEM及PMM介紹

MySQL Router 設定檔說明

【工作筆記】SQL Timeout追蹤