在數據庫服務器上,能夠架構多個Mysql服務器,進行單機多實例的讀寫分離;mysql
能夠經過mysqld_multi來進行多實例的管理,mysqld_multi是用perl寫的腳本,原理是經過mysql_admin來進行多個數據庫的操做;多實例的配置文件也有點不一樣,能夠看做是多個mysql配置的集合;mysqld_multi命令使用以下:sql
mysqld_multi report/start/stop
能夠使用 mysqld_multi --example來查看配置文件的例子;也能夠直接複製下來看成本身的配置;注意備份之前的配置;shell
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服務器socket
mysqld_multi start 1,2
這個時候使用 mysqld_report來查看是否已啓動是會失敗的,由於尚未新建 multi_admin來查詢狀態;咱們能夠經過 netstat來查看端口tcp
# 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文件; ide
下面咱們能夠鏈接mysql來配置multi_admin用戶;因爲有多個實例,鏈接須要使用socket鏈接ui
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