Ubuntu-12.04

讓 mysqld_multi 與暴發戶一起工作

  • March 21, 2013

我使用本指南開始使用此 wiki 頁面作為 upstart 腳本的參考。

我的問題是,當我執行 a 時,service mysql start我得到了六個程序而不是兩個程序,就好像暴發戶跑了三遍一樣。以下是從複製的過程ps

/usr/sbin/mysqld --user=root --pid-file=/var/run/mysqld/mysqld1.pid --socket=/var/run/mysqld/mysqld1.sock --port=3301 --basedir=/usr --datadir=/var/lib/mysql1 --tmpdir=/tmp --lc-messages-dir=/usr/share/mysql --skip-external-locking --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --general_log_file=/var/log/mysql/mysql1-general.log --log_error=/var/log/mysql/error.log --server-id=201 --log_bin=/var/log/mysql/mysql1-bin.log --expire_logs_days=10 --max_binlog_size=100M
/usr/sbin/mysqld --user=root --pid-file=/var/run/mysqld/mysqld2.pid --socket=/var/run/mysqld/mysqld2.sock --port=3302 --basedir=/usr --datadir=/var/lib/mysql2 --tmpdir=/tmp --lc-messages-dir=/usr/share/mysql --skip-external-locking --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --general_log_file=/var/log/mysql/mysql2-general.log --log_error=/var/log/mysql/error.log --server-id=202 --log_bin=/var/log/mysql/mysql2-bin.log --expire_logs_days=10 --max_binlog_size=100M --innodb_file_per_table --innodb_flush_method=O_DIRECT --innodb_log_file_size=1G --innodb_buffer_pool_size=4G
/usr/sbin/mysqld --user=root --pid-file=/var/run/mysqld/mysqld1.pid --socket=/var/run/mysqld/mysqld1.sock --port=3301 --basedir=/usr --datadir=/var/lib/mysql1 --tmpdir=/tmp --lc-messages-dir=/usr/share/mysql --skip-external-locking --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --general_log_file=/var/log/mysql/mysql1-general.log --log_error=/var/log/mysql/error.log --server-id=201 --log_bin=/var/log/mysql/mysql1-bin.log --expire_logs_days=10 --max_binlog_size=100M
/usr/sbin/mysqld --user=root --pid-file=/var/run/mysqld/mysqld2.pid --socket=/var/run/mysqld/mysqld2.sock --port=3302 --basedir=/usr --datadir=/var/lib/mysql2 --tmpdir=/tmp --lc-messages-dir=/usr/share/mysql --skip-external-locking --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --general_log_file=/var/log/mysql/mysql2-general.log --log_error=/var/log/mysql/error.log --server-id=202 --log_bin=/var/log/mysql/mysql2-bin.log --expire_logs_days=10 --max_binlog_size=100M --innodb_file_per_table --innodb_flush_method=O_DIRECT --innodb_log_file_size=1G --innodb_buffer_pool_size=4G
/usr/sbin/mysqld --user=root --pid-file=/var/run/mysqld/mysqld1.pid --socket=/var/run/mysqld/mysqld1.sock --port=3301 --basedir=/usr --datadir=/var/lib/mysql1 --tmpdir=/tmp --lc-messages-dir=/usr/share/mysql --skip-external-locking --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --general_log_file=/var/log/mysql/mysql1-general.log --log_error=/var/log/mysql/error.log --server-id=201 --log_bin=/var/log/mysql/mysql1-bin.log --expire_logs_days=10 --max_binlog_size=100M
/usr/sbin/mysqld --user=root --pid-file=/var/run/mysqld/mysqld2.pid --socket=/var/run/mysqld/mysqld2.sock --port=3302 --basedir=/usr --datadir=/var/lib/mysql2 --tmpdir=/tmp --lc-messages-dir=/usr/share/mysql --skip-external-locking --key_buffer=16M --max_allowed_packet=16M --thread_stack=192K --thread_cache_size=8 --myisam-recover=BACKUP --query_cache_limit=1M --query_cache_size=16M --general_log_file=/var/log/mysql/mysql2-general.log --log_error=/var/log/mysql/error.log --server-id=202 --log_bin=/var/log/mysql/mysql2-bin.log --expire_logs_days=10 --max_binlog_size=100M --innodb_file_per_table --innodb_flush_method=O_DIRECT --innodb_log_file_size=1G --innodb_buffer_pool_size=4G

這會導致以下行出現在 MySQL 中error.log

InnoDB: Unable to lock ./ibdata1, error: 11

即使在重新啟動時它也會以這種方式執行。我的 MySQL 新貴腳本是標準的(如上面連結的 wiki 頁面中所述),除了“腳本…結束腳本”部分:

script
exec /etc/init.d/mysql start
end script

我已經修改了 MySQL 的 apparmor 配置文件並且執行/etc/init.d/mysql start正常。

我怎樣才能讓暴發戶只執行一次它的 mysql.conf 腳本?

注意:此答案假設您已閱讀我用來設置的指南mysqld_multi

答案是刪除暴發戶腳本(/etc/init/mysql.conf在我的例子中)。這將允許service mysql [start|stop]正常執行。

但是,您將在重新啟動時遇到問題。當我重新啟動機器時,Ubuntu 正在刪除.sock放置我的文件的目錄 ( /var/run/mysqld/)。將以下行添加到/etc/init.d/mysql腳本中解決了該問題。

[ -d /var/run/mysqld ] || install -m 755 -o mysql -g root -d /var/run/mysqld

我將上面的行放在了if..elsecase語句之間。

儘管添加了這一行,但刪除 upstart 腳本將導致 MySQL 甚至不再嘗試在啟動時啟動。系統啟動後,必須通過發出以下命令手動啟動 MySQL:

$ sudo service mysql start

但是,這似乎是一個單獨的問題,因為上述資訊能夠mysqld_multi使用該service命令啟動兩個 MySQL 程序。

引用自:https://serverfault.com/questions/489279