MySQL5.6主從複製mysql
五個步驟完成MySQL主從複製sql
1.主從服務器的 /etc/my.cnf 的配置,設置惟一ID 啓用二進制日誌。數據庫
2.建立主從複製的帳號,並受權REPLICATION SLAVE權限。服務器
3.查詢master的狀態,獲取主服務器二進制日誌信息。網絡
4.配置從服務器去鏈接主服務器進行數據複製。ide
5.檢查從服務器複製功能狀態,測試主從複製。工具
參考文章 http://manual.blog.51cto.com/3300438/1372378測試
1.修改主服務器和從服務器的 /etc/my.cnf 的配置文件rest
修改主服務器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,防止主服務器狀態值變化
防止其餘主機操做主數據庫,能夠用只讀鎖表的方式來防止數據庫被修改。
mysql> flush tables with read lock;
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)
mysql> unlock tables;
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主從複製完成。