標籤:步驟 五個 完成
MySQL5.6主從複製
五個步驟完成MySQL主從複製
1.主從伺服器的 /etc/my.cnf 的配置,設定唯一ID 啟用二進位日誌。
2.建立主從複製的帳號,並授權REPLICATION SLAVE許可權。
3.查詢master的狀態,擷取主伺服器二進位日誌資訊。
4.配置從伺服器去串連主伺服器進行資料複製。
5.檢查從伺服器複製功能狀態,測試主從複製。
參考文章 http://manual.blog.51cto.com/3300438/1372378
1.修改主伺服器和從伺服器的 /etc/my.cnf 的設定檔
修改主伺服器master:
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin #啟用二進位日誌,並設定二進位記錄檔首碼
server-id=222 #[必須]伺服器唯一ID,必須是1至232-1之間的整數
注意:在設定檔中不可以使用skip-networking參數選項,否則從伺服器將無法與主伺服器進行連 接並複製資料。
修改從伺服器slave:
vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin
server-id=223
注意:如果有多台從伺服器,則所有的伺服器ID編號都必須是唯一的。
MySQL從伺服器上二進位日誌功能是不需要開啟的。
但是,你也可以通過啟用從伺服器的二進位日誌功能,實現資料備份與恢複,此外在一些更複雜的 拓撲環境中,MySQL從伺服器也可以扮演其他從伺服器的主伺服器。
修改完成後,重啟兩台伺服器的mysql
service mysql restart
2.在主伺服器上建立帳戶並授權slave:
mysql -uroot -p123
mysql>GRANT REPLICATION SLAVE ON *.* to ‘mysync‘@‘%‘ identified by ‘123456‘;
這個賬戶必須擁有REPLICATION SLAVE許可權,可以為不同的從伺服器建立不同的賬戶與密碼,也可以使用統一的賬戶與密碼。
3.登入主伺服器的mysql,查詢master的狀態
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000008 | 520 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
File列顯示的是二進位記錄檔名,Position為當前日誌記錄位置,從伺服器的設定中需要用到。
注意:執行完此步驟後不要再操作主伺服器MYSQL,防止主伺服器狀態值變化
flush tables with read lock; 命令的作用是對所有資料庫的所有表執行唯讀鎖定,
唯讀鎖定後所有資料庫的寫操作將被拒絕,但讀操作可以繼續。
執行鎖定可以防止在查看二進位日誌資訊的同時有人對資料進行修改操作,
最後使用unlock tables; 語句對全域鎖執行結束操作。
提示:
如果MySQL資料庫系統中已經存在大量資料,可以使用使用mysqldump工具在主伺服器進行備 份,然後匯入從伺服器。
(主)匯出
mysqldump -u root -p‘123‘ --all-databases --lock-all-tables > bak_mysql.sql
(從)匯入
mysql -u root -p‘123456‘ < bak_mysql.sql
4.配置從伺服器Slave:
資料複製的關鍵操作是配置從伺服器去串連主伺服器進行資料複製,我們需要告知從伺服器建立網路連接所有必要的資訊。
使用CHANGE MASTER TO 語句即可完成該項工作,
MASTER_HOST 指定主伺服器主機名稱或IP地址,
MASTER_USER 為主伺服器上建立的擁有複製許可權的賬戶名稱,
MASTER_PASSWORD 為該賬戶的密碼,
MASTER_LOG_FILE 指定主伺服器二進位記錄檔名稱,
MASTER_LOG_POS 為主伺服器二進位日誌目前記錄的位置。
mysql -u root -p‘123456‘ #進入MySQL
mysql>change master to master_host=‘192.168.1.100‘,master_user=‘mysync‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000008‘,master_log_pos=520;
mysql>start slave; //啟動從伺服器複製功能
5.檢查從伺服器複製功能狀態:
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.100 //主伺服器地址
Master_User: mysync //授權帳戶名稱,盡量避免使用root
Master_Port: 3306 //資料庫連接埠,部分版本沒有此行
Connect_Retry: 60
Master_Log_File: mysql-bin.000008
Read_Master_Log_Pos: 520 //同步讀取二進位日誌的位置,大於等於主伺服器
Relay_Log_File: ddte-relay-bin.000003
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000008
Slave_IO_Running: Yes //此狀態必須YES
Slave_SQL_Running: Yes //此狀態必須YES
......
註:Slave_IO及Slave_SQL進程必須正常運行,即YES狀態,否則都是錯誤的狀態(如:其中一個NO均屬錯誤)。
以上操作過程,主從伺服器配置完成。
6.主從伺服器測試:
主伺服器Mysql,建立資料庫,並在這個庫中建表插入一條資料:
mysql> create database test_db;
Query OK, 1 row affected (0.00 sec)
mysql> use test_db;
Database changed
mysql> create table test_db(id int(3),name char(10));
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test_db values(001,‘bobu‘);
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+----------------------+
| Database |
+----------------------+
| information_schema |
| test_db |
| mysql |
+----------------------+
4 rows in set (0.00 sec)
從伺服器Mysql查詢:
mysql> show databases;
+----------------------+
| Database |
+----------------------+
| information_schema |
| test_db |
| mysql |
+----------------------+
4 rows in set (0.00 sec)
mysql> use test_db
Database changed
mysql> select * from test_db; //查看主伺服器上新增的具體資料
+------+------+
| id | name |
+------+------+
| 1 | bobu |
+------+------+
1 row in set (0.00 sec)
MySQL主從複製完成。
五個步驟完成MySQL主從複製