Ubuntu-12.04
讓 mysqld_multi 與暴發戶一起工作
我使用本指南開始使用此 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..else
和case
語句之間。儘管添加了這一行,但刪除 upstart 腳本將導致 MySQL 甚至不再嘗試在啟動時啟動。系統啟動後,必須通過發出以下命令手動啟動 MySQL:
$ sudo service mysql start
但是,這似乎是一個單獨的問題,因為上述資訊能夠
mysqld_multi
使用該service
命令啟動兩個 MySQL 程序。