mysql主从库配置ps:mysql5.6
1?Mysql cluster版本主從服務器搭建實踐
?
主從的作用:MySQL的主從服務器可以滿足同步數據庫,同步表,同步表內容,也可以指定僅同步某個數據庫或某個表,還可以排除不同步某個數據庫某個表。
同步原理:主從數據庫同步主要是通過二進制日志來實現同步的。
從mysql官網下載最新版本:dev.mysql.com
本文環境:
主mysql服務器:10.1.68.110
安裝版本:mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz
從mysql服務器:10.1.68.102
安裝版本:mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz
注意:最好是主從服務器采用相同版本,若不行,建議從服務器版本高于主服務器版本。
另外mysql-5.6.10版本的主從配置與mysql-cluster版本不同,主要是my.cnf配置文件不同,start slave命令也不同,要注意。
本文章兩種版本的配置都有記錄。
1.1?配置主mysql服務器
?
1.???????安裝主mysql步驟(參考tar包中的INSTALL-BINARY文件即可,很簡單)
| shell> groupadd mysql shell> useradd -r -g mysql mysql shell> tar zxf??mysql-cluster-gpl-7.2.9-linux2.6-x86_64.tar.gz shell> mv mysql-cluster-gpl-7.2.9-linux2.6-x86_64 /opt/mysql-master shell> cd /opt/mysql-master shell> chown -R mysql.mysql * shell> scripts/mysql_install_db --user=mysql shell> chown -R root . shell> chown -R mysql data # Next command is optional shell> cp support-files/my-medium.cnf /etc/my.cnf shell> bin/mysqld_safe & 若啟動失敗,再次嘗試一下執行scripts/mysql_install_db --user=mysql命令后在啟動。 # Next command is optional,成功啟動了mysqld之后才會生成下面的腳本文件 shell> cp support-files/mysql.server /etc/init.d/mysql.server |
2.???????配置主的my.cnf文件(基本上不需要任何配置,默認都有了)
# vi /etc/my.cnf
| 關鍵性的配置 log-bin=mysql-bin server-id???= 1 binlog-do-db=icinga binlog-do-db=DB2?????如果備份多個數據庫,重復設置這個選項即可 binlog-do-db=DB3??//需要同步的數據庫,如果沒有本行,即表示同步所有的數據庫 binlog-ignore-db=mysql??//被忽略的數據庫 |
保存退出
3.???????唯一要做的就是創建允許從服務器訪問的帳號backup
mysql> grant replication slave on *.* to 'backup'@'10.1.68.102' identified by'1234qwer';
Query OK, 0 rows affected (0.00 sec)
若有多臺從服務器,就將ip修改一下執行多次就可以了。
4.???????重啟主機的mysql服務。
1.2?配置從mysql服務器
?
1.?????????安裝主mysql步驟(參考tar包中的INSTALL-BINARY文件即可,很簡單)
略
2.?????????配置從機的/etc/my.cnf文件
| 關鍵性的配置 log-bin=mysql-bin server-id???????= 2 master-host?????=???10.1.68.110 master-user?????=???backup master-password =???1234qwer master-port?????=??3306 replicate-do-db=icinga replicate-do-db=DB2 binlog-do-db=DB3??//需要同步的數據庫,如果沒有本行,即表示同步所有的數據庫 binlog-ignore-db=mysql??//被忽略的數據庫 |
保存退出
3.?????????重啟從機的mysql服務,基本的從機配置完成。
4.?????????若從服務器的偏移量與主機不同,手動修改偏移量
(1)先查看主機的狀態信息
mysql> show master status;
?
(2)登錄從機按照主的Position修改從機的Position
mysql> slave stop;
mysql>?change master to master_host='10.1.68.110',master_user='backup',master_password='1234qwer',master_log_file='mysql-bin.000011',master_log_pos=62291;
mysql> slave start;
?
1.3??驗證同步
?
1.?????????在icinga數據庫中創建一個表并插入數據
| mysql> create table abc(id int,name char(10)); Query OK, 0 rows affected (0.40 sec) mysql> insert into abc values(1,'shenxiaoran'); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> select * from abc; ? ? |
2.?????????查看從mysql服務器,表及內容是否都同步過來
mysql> show tables;
?
再查看表內容,數據也都同步了,如下圖
?
至此,mysql數據庫主從同步完成。
?
1.4?常用主從同步的命令
?
1.4.1?主服務器常用命令
1.???????查看主機狀態和Position信息,用來讓slave機與master保持一致。
mysql> show master status;
1.4.2?從服務器常用命令
mysql> show slave status;
mysql> slave stop;
mysql> slave start;
mysql> show processlist;
2?Mysql-5.6.10版本主從數據庫的搭建
?
部署環境:
OS: CentOS release 6.3 (Final)
主mysql-master服務器:192.168.123.75
安裝版本:mysql-5.6.10.tar.gz?源碼包
從mysql-slave服務器:192.168.123.105
安裝版本:mysql-5.6.10.tar.gz?源碼包
2.1?分別安裝主從mysql-master、mysql-slave服務器
?
mysql5.6.10.tar.gz是截至2013年4月10日mysql官網的最新的源碼包版本,該版本的安裝方法與傳統的mysql安裝方法不同,安裝前必須手動安裝cmake
cmake官網下載:http://cmake.org/cmake/resources/software.html
./bootstrap
make
make install
接下來,安裝mysql,我這里寫了一個自動安裝的shell腳本
?
2.2?配置主mysql-master服務器
?
Mysql-5.6.10版本的my.cnf文件默認什么參數都沒有,需要自己配
# vi /etc/my.cnf
| 關鍵性的配置 log-bin = mysql-bin # These are commonly set, remove the # and set as required. basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 server_id = 106?//?注意新版本用的是下劃線 socket = /tmp/mysql.sock bind-address = 0.0.0.0 //這里綁定監聽0.0.0.0:3306,默認是:::3306 binlog-do-db = cacti??//如果備份多個數據庫,重復添加即可,若沒有表示備份所有數據庫 binlog-do-db = db2 binlog-ignore-db = mysql??//被忽略的數據庫,不做復制 |
保存退出
5.???????唯一要做的就是創建允許從服務器訪問的帳號mysync
mysql> grant replication slave on *.* to 'mysync'@'192.168.123.105' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
若有多臺從服務器,就將ip修改一下執行多次就可以了。
6.???????重啟主機的mysql服務。
從機測試連接到主mysql
# bin/mysql -h 192.168.123.75 -u mysync -p123456
mysql>
測試成功連接。
2.3?配置從mysql-slave服務器
?
# vi /etc/my.cnf
| log_bin = mysql-bin server_id = 107 注意,下面的參數不能再使用了,否則導致mysql無法啟動 master-host = 10.1.68.110 master-user = backup master-password = 1234qwer master-port = 3306 |
1.???????登錄主服務器的mysql,查詢master的狀態
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File?????????????| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |??????120 | cacti????????| mysql????????????|???????????????????|
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
注:執行完此步驟后不要再操作主服務器MYSQL,防止主服務器狀態值變化
2.???????登錄從mysql服務器,配置binary log文件和Position(其實就是主的binary log文件的大小)與主一致。
mysql> change master to master_host='192.168.123.75',master_user='mysync',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
3.???????查看從mysql服務器的狀態
mysql> show slave status;
重點是查看?Slave_IO_Running | Slave_SQL_Running
如果出現的結果是Yes??????????????| Yes
說明mysql主從配置成功完成了。
?
2.4?測試主從服務器同步
?
1.??將備份后的數據庫導入到主mysql服務器中,查看從mysql服務器是否會同步。
# bin/mysql < /root/cacti_sql_bak
2.??查看從mysql服務器的數據庫是否有更新
mysql> show databases;
+--------------------+
| Database???????????|
+--------------------+
| information_schema |
| cacti??????????????|
| mysql??????????????|
| performance_schema |
| test???????????????|
+--------------------+
5 rows in set (0.01 sec)
從上面看到主mysql服務器的數據庫還未全部導入完成,從mysql服務器已經開始同步了。
?
3??FAQ
?
3.1?若show slave status命令的結果查看正常,卻依然無法看到同步的數據庫,原因在哪?
?
mysql> show slave status;?執行后部分結果如下
Slave_IO_State:Waiting for master to send event
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
查看數據庫卻依然無法同步,原因在哪里?
解決辦法:
1)?嘗試重啟master數據庫;
2)?在重啟slave數據庫之前,必須先刪除data目錄下的master.info文件,因為master.info記錄了上次要連接主庫的信息,如果不刪除,即使my.cnf里進行了修改,手動修改Position(偏移量)也還是同步不了,因為讀取的還是偏移量出錯時的master.info文件信息。
# rm -f data/master.info
# support-files/mysql.server start
Starting MySQL.???????????[??OK??]
再次查看slave,同步終于成功了。
mysql> show processlist;
id|User??????????|Host|db??????|Command??|Time??????|state
1|?system user |???????|?NULL???| Connect |1196 | Waiting for master to send event
2 | system user |????| NULL???| Connect |-55692 | Slave has read all relay log; waiting for the slave I/O thread to
3 | root???|localhost|icinga| Query|??0 |NULL | show processlist
3.2?若show slave status命令的結果出現下面的異常情況,如何解決?
?
執行mysql> show slave status;命令,看到下面的顯示結果
Slave_IO_Running:Connecting
Slave_SQL_Running:Yes?
看到上面的問題,說明是從服務器無法正常連接到主服務器導致。原因一般和下面幾種情況有關:
l??Iptables防護墻阻止了3306端口
l??主mysql服務器的grant授權命令有誤
l??主mysql服務器的監聽端口不是0.0.0.0:3306,導致別的服務器無法連接到主mysql
解決辦法:
首先,關閉了iptables;
然后,檢查主mysql服務器的grant授權命令,正確無誤,這一點排除。
其次,查看主mysql的監聽端口,默認是:::3306,不知道是否因為這個問題導致
修改主服務器的my.cnf文件,添加下面語句
bind-address = 0.0.0.0
重啟mysq.server服務
再次netstat –an|more?查看3306端口,出現了0.0.0.0:3306,說明修改成功。
登錄到從mysql服務器上,遠程連接
# bin/mysql -h 192.168.123.75 -umysync -p123456
Your MySQL connection id is 8
Server version: 5.6.10-log Source distribution
mysql>
連接成功。
最后重新執行主從操作:
主mysql服務器:mysql> show master status;
從mysql服務器:mysql> stop slave;
從mysql服務器:mysql> change master to……;
從mysql服務器:mysql> start slave;
從mysql服務器:mysql> show slave status;
Slave_IO_Running:Yes
Slave_SQL_Running:Yes?
?
再次測試主從同步,成功。
1?Mysql cluster版本主從服務器搭建實踐
?
主從的作用:MySQL的主從服務器可以滿足同步數據庫,同步表,同步表內容,也可以指定僅同步某個數據庫或某個表,還可以排除不同步某個數據庫某個表。
同步原理:主從數據庫同步主要是通過二進制日志來實現同步的。
從mysql官網下載最新版本:dev.mysql.com
本文環境:
主mysql服務器:10.1.68.110
安裝版本:mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz
從mysql服務器:10.1.68.102
安裝版本:mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz
注意:最好是主從服務器采用相同版本,若不行,建議從服務器版本高于主服務器版本。
另外mysql-5.6.10版本的主從配置與mysql-cluster版本不同,主要是my.cnf配置文件不同,start slave命令也不同,要注意。
本文章兩種版本的配置都有記錄。
1.1?配置主mysql服務器
?
1.???????安裝主mysql步驟(參考tar包中的INSTALL-BINARY文件即可,很簡單)
| shell> groupadd mysql shell> useradd -r -g mysql mysql shell> tar zxf??mysql-cluster-gpl-7.2.9-linux2.6-x86_64.tar.gz shell> mv mysql-cluster-gpl-7.2.9-linux2.6-x86_64 /opt/mysql-master shell> cd /opt/mysql-master shell> chown -R mysql.mysql * shell> scripts/mysql_install_db --user=mysql shell> chown -R root . shell> chown -R mysql data # Next command is optional shell> cp support-files/my-medium.cnf /etc/my.cnf shell> bin/mysqld_safe & 若啟動失敗,再次嘗試一下執行scripts/mysql_install_db --user=mysql命令后在啟動。 # Next command is optional,成功啟動了mysqld之后才會生成下面的腳本文件 shell> cp support-files/mysql.server /etc/init.d/mysql.server |
2.???????配置主的my.cnf文件(基本上不需要任何配置,默認都有了)
# vi /etc/my.cnf
| 關鍵性的配置 log-bin=mysql-bin server-id???= 1 binlog-do-db=icinga binlog-do-db=DB2?????如果備份多個數據庫,重復設置這個選項即可 binlog-do-db=DB3??//需要同步的數據庫,如果沒有本行,即表示同步所有的數據庫 binlog-ignore-db=mysql??//被忽略的數據庫 |
保存退出
3.???????唯一要做的就是創建允許從服務器訪問的帳號backup
mysql> grant replication slave on *.* to 'backup'@'10.1.68.102' identified by'1234qwer';
Query OK, 0 rows affected (0.00 sec)
若有多臺從服務器,就將ip修改一下執行多次就可以了。
4.???????重啟主機的mysql服務。
1.2?配置從mysql服務器
?
1.?????????安裝主mysql步驟(參考tar包中的INSTALL-BINARY文件即可,很簡單)
略
2.?????????配置從機的/etc/my.cnf文件
| 關鍵性的配置 log-bin=mysql-bin server-id???????= 2 master-host?????=???10.1.68.110 master-user?????=???backup master-password =???1234qwer master-port?????=??3306 replicate-do-db=icinga replicate-do-db=DB2 binlog-do-db=DB3??//需要同步的數據庫,如果沒有本行,即表示同步所有的數據庫 binlog-ignore-db=mysql??//被忽略的數據庫 |
保存退出
3.?????????重啟從機的mysql服務,基本的從機配置完成。
4.?????????若從服務器的偏移量與主機不同,手動修改偏移量
(1)先查看主機的狀態信息
mysql> show master status;
?
(2)登錄從機按照主的Position修改從機的Position
mysql> slave stop;
mysql>?change master to master_host='10.1.68.110',master_user='backup',master_password='1234qwer',master_log_file='mysql-bin.000011',master_log_pos=62291;
mysql> slave start;
?
1.3??驗證同步
?
1.?????????在icinga數據庫中創建一個表并插入數據
| mysql> create table abc(id int,name char(10)); Query OK, 0 rows affected (0.40 sec) mysql> insert into abc values(1,'shenxiaoran'); Query OK, 1 row affected, 1 warning (0.01 sec) mysql> select * from abc; ? ? |
2.?????????查看從mysql服務器,表及內容是否都同步過來
mysql> show tables;
?
再查看表內容,數據也都同步了,如下圖
?
至此,mysql數據庫主從同步完成。
?
1.4?常用主從同步的命令
?
1.4.1?主服務器常用命令
1.???????查看主機狀態和Position信息,用來讓slave機與master保持一致。
mysql> show master status;
1.4.2?從服務器常用命令
mysql> show slave status;
mysql> slave stop;
mysql> slave start;
mysql> show processlist;
2?Mysql-5.6.10版本主從數據庫的搭建
?
部署環境:
OS: CentOS release 6.3 (Final)
主mysql-master服務器:192.168.123.75
安裝版本:mysql-5.6.10.tar.gz?源碼包
從mysql-slave服務器:192.168.123.105
安裝版本:mysql-5.6.10.tar.gz?源碼包
2.1?分別安裝主從mysql-master、mysql-slave服務器
?
mysql5.6.10.tar.gz是截至2013年4月10日mysql官網的最新的源碼包版本,該版本的安裝方法與傳統的mysql安裝方法不同,安裝前必須手動安裝cmake
cmake官網下載:http://cmake.org/cmake/resources/software.html
./bootstrap
make
make install
接下來,安裝mysql,我這里寫了一個自動安裝的shell腳本
?
2.2?配置主mysql-master服務器
?
Mysql-5.6.10版本的my.cnf文件默認什么參數都沒有,需要自己配
# vi /etc/my.cnf
| 關鍵性的配置 log-bin = mysql-bin # These are commonly set, remove the # and set as required. basedir = /usr/local/mysql datadir = /usr/local/mysql/data port = 3306 server_id = 106?//?注意新版本用的是下劃線 socket = /tmp/mysql.sock bind-address = 0.0.0.0 //這里綁定監聽0.0.0.0:3306,默認是:::3306 binlog-do-db = cacti??//如果備份多個數據庫,重復添加即可,若沒有表示備份所有數據庫 binlog-do-db = db2 binlog-ignore-db = mysql??//被忽略的數據庫,不做復制 |
保存退出
5.???????唯一要做的就是創建允許從服務器訪問的帳號mysync
mysql> grant replication slave on *.* to 'mysync'@'192.168.123.105' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
若有多臺從服務器,就將ip修改一下執行多次就可以了。
6.???????重啟主機的mysql服務。
從機測試連接到主mysql
# bin/mysql -h 192.168.123.75 -u mysync -p123456
mysql>
測試成功連接。
2.3?配置從mysql-slave服務器
?
# vi /etc/my.cnf
| log_bin = mysql-bin server_id = 107 注意,下面的參數不能再使用了,否則導致mysql無法啟動 master-host = 10.1.68.110 master-user = backup master-password = 1234qwer master-port = 3306 |
1.???????登錄主服務器的mysql,查詢master的狀態
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File?????????????| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |??????120 | cacti????????| mysql????????????|???????????????????|
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
注:執行完此步驟后不要再操作主服務器MYSQL,防止主服務器狀態值變化
2.???????登錄從mysql服務器,配置binary log文件和Position(其實就是主的binary log文件的大小)與主一致。
mysql> change master to master_host='192.168.123.75',master_user='mysync',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
3.???????查看從mysql服務器的狀態
mysql> show slave status;
重點是查看?Slave_IO_Running | Slave_SQL_Running
如果出現的結果是Yes??????????????| Yes
說明mysql主從配置成功完成了。
?
2.4?測試主從服務器同步
?
1.??將備份后的數據庫導入到主mysql服務器中,查看從mysql服務器是否會同步。
# bin/mysql < /root/cacti_sql_bak
2.??查看從mysql服務器的數據庫是否有更新
mysql> show databases;
+--------------------+
| Database???????????|
+--------------------+
| information_schema |
| cacti??????????????|
| mysql??????????????|
| performance_schema |
| test???????????????|
+--------------------+
5 rows in set (0.01 sec)
從上面看到主mysql服務器的數據庫還未全部導入完成,從mysql服務器已經開始同步了。
?
3??FAQ
?
3.1?若show slave status命令的結果查看正常,卻依然無法看到同步的數據庫,原因在哪?
?
mysql> show slave status;?執行后部分結果如下
Slave_IO_State:Waiting for master to send event
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
查看數據庫卻依然無法同步,原因在哪里?
解決辦法:
1)?嘗試重啟master數據庫;
2)?在重啟slave數據庫之前,必須先刪除data目錄下的master.info文件,因為master.info記錄了上次要連接主庫的信息,如果不刪除,即使my.cnf里進行了修改,手動修改Position(偏移量)也還是同步不了,因為讀取的還是偏移量出錯時的master.info文件信息。
# rm -f data/master.info
# support-files/mysql.server start
Starting MySQL.???????????[??OK??]
再次查看slave,同步終于成功了。
mysql> show processlist;
id|User??????????|Host|db??????|Command??|Time??????|state
1|?system user |???????|?NULL???| Connect |1196 | Waiting for master to send event
2 | system user |????| NULL???| Connect |-55692 | Slave has read all relay log; waiting for the slave I/O thread to
3 | root???|localhost|icinga| Query|??0 |NULL | show processlist
3.2?若show slave status命令的結果出現下面的異常情況,如何解決?
?
執行mysql> show slave status;命令,看到下面的顯示結果
Slave_IO_Running:Connecting
Slave_SQL_Running:Yes?
看到上面的問題,說明是從服務器無法正常連接到主服務器導致。原因一般和下面幾種情況有關:
l??Iptables防護墻阻止了3306端口
l??主mysql服務器的grant授權命令有誤
l??主mysql服務器的監聽端口不是0.0.0.0:3306,導致別的服務器無法連接到主mysql
解決辦法:
首先,關閉了iptables;
然后,檢查主mysql服務器的grant授權命令,正確無誤,這一點排除。
其次,查看主mysql的監聽端口,默認是:::3306,不知道是否因為這個問題導致
修改主服務器的my.cnf文件,添加下面語句
bind-address = 0.0.0.0
重啟mysq.server服務
再次netstat –an|more?查看3306端口,出現了0.0.0.0:3306,說明修改成功。
登錄到從mysql服務器上,遠程連接
# bin/mysql -h 192.168.123.75 -umysync -p123456
Your MySQL connection id is 8
Server version: 5.6.10-log Source distribution
mysql>
連接成功。
最后重新執行主從操作:
主mysql服務器:mysql> show master status;
從mysql服務器:mysql> stop slave;
從mysql服務器:mysql> change master to……;
從mysql服務器:mysql> start slave;
從mysql服務器:mysql> show slave status;
Slave_IO_Running:Yes
Slave_SQL_Running:Yes?
再次測試主從同步,成功。
轉載于:https://www.cnblogs.com/shininguang/p/5438035.html
總結
以上是生活随笔為你收集整理的mysql主从库配置ps:mysql5.6的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无痛人流多少钱啊啊?
- 下一篇: noip2010提高组3题题解 by r