MySQL單機多實例
在數據庫服務器上,可以架構多個Mysql服務器,進行單機多實例的讀寫分離;
可以通過mysqld_multi來進行多實例的管理,mysqld_multi是用perl寫的腳本,原理是通過mysql_admin來進行多個數據庫的操作;多實例的配置文件也有點不同,可以看作是多個mysql配置的集合;mysqld_multi命令使用如下:
mysqld_multi report/start/stop
可以使用 mysqld_multi --example來查看配置文件的例子;也可以直接復制下來當作自己的配置;注意備份以前的配置;
mv /etc/my.cnf /etc/my.cnf.bak mysqld_multi --example > /etc/my.cnf
按自己的需要修改配置文件,改成多個數據庫;
[mysqld_multi] mysqld = /usr/bin/mysqld_safe mysqladmin = /usr/bin/mysqladmin user = multi_admin password = my_password [mysqld1] socket = /tmp/mysql1.sock port = 3306 pid-file = /data2/mysql1/mysql.pid datadir = /data2/mysql1 [mysqld2] socket = /tmp/mysql2.sock port = 3307 pid-file = /data2/mysql2/mysql.pid datadir = /data2//mysql2
這里多出了一個[mysqld_multi]的配置項,需要在每個數據庫里配置一個multi_admin來管理mysql
下面新建數據庫:
mysql_install_db --user=mysql --datadir=/data2/mysql1 mysql_install_db --user=mysql --datadir=/data2/mysql2
啟動mysql服務器
mysqld_multi start 1,2
這個時候使用 mysqld_report來查看是否已啟動是會失敗的,因為還沒有新建 multi_admin來查詢狀態;我們可以通過 netstat來查看端口
# netstat -tulnp | grep mysql tcp 0 0 :::3306 :::* LISTEN 716784/mysqld tcp 0 0 :::3307 :::* LISTEN 3669/mysqld tcp 0 0 :::3317 :::* LISTEN 714503/mysqld
可以看到3306和3307端口已經監聽;同時目錄下生成了相應的.socket文件;
下面我們可以連接mysql來配置multi_admin用戶;由于有多個實例,連接需要使用socket連接
mysql -u root -S /tmp/mysql1.sock grant shutdown on *.* to multi_admin@'localhost' identified by'my_password'; flush privileges; quit
同樣道理配置另一臺3307;
也可以拷貝一份mysql來創建新的實例,這樣里面的用戶也會被拷貝。注意目錄權限必須是mysql , chown -R mysql.mysql /data2/mysql2
下面可以使用
mysqld_multi --defaults-file=/etc/my.cnf start 啟動全部實例
如果啟動出錯的話,可以到對應目錄下查看日志文件,看哪里出錯了。
使用mysqld_multi需要手動啟動數據庫,也可以加入開機啟動項:
echo "mysqld_multi" >> /etc/rc.local
來自:http://my.oschina.net/ifeixiang/blog/369833