1、設置binlog_format,開啓log_bin
mysql> system cat /etc/my.cnf | grep binlog
binlog_format=mixed
mysql> show variables like '%binlog_format%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | MIXED |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.01 sec)
2、兩臺機子serverid,uuid不能一樣
mysql> show variables like '%server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 23306 |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like '%uuid';
+---------------+--------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------+
| server_uuid | 64f4a34e-9258-11e4-827c-08002796172a |
+---------------+--------------------------------------+
1 row in set (0.00 sec)
mysql> show variables like '%server_id';
+---------------+--------+
| Variable_name | Value |
+---------------+--------+
| server_id | 343306 |
+---------------+--------+
1 row in set (0.00 sec)
mysql> show variables like '%uuid';
+---------------+--------------------------------------+
| Variable_name | Value |
+---------------+--------------------------------------+
| server_uuid | b1f572a1-8e9a-11e4-aa17-080027eb4037 |
+---------------+--------------------------------------+
1 row in set (0.00 sec)
2、備份主庫數據
mysqldump -uroot -p3306 --master-data=2 --single-transaction -A > master.sql
備份後的文件會記錄主庫log的pos
根據此信息修改後在從庫導入
[root@mysql34 user_3306]# mysql -uroot -p3306 < /tmp/master.sql
Warning: Using a password on the command line interface can be insecure.
3、上面所示的用戶repl爲複製用的用戶,需要在主庫中增加這個用戶
mysql> grant replication slave on *.* to 'repl'@'192.168.56.%' identified by 'repl';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4、可以查看複製情況了。
主庫:
mysql> create table test as select * from emp;
Query OK, 14 rows affected (0.08 sec)
Records: 14 Duplicates: 0 Warnings: 0
mysql> select ename from test where deptno=10;
+--------+
| ename |
+--------+
| CLARK |
| KING |
| MILLER |
+--------+
3 rows in set (0.04 sec)
從庫:
mysql> select ename from test where deptno=10;
+--------+
| ename |
+--------+
| CLARK |
| KING |
| MILLER |
+--------+
3 rows in set (0.03 sec)
主庫刪除數據:
mysql> delete from test where ename = 'KING';
Query OK, 1 row affected (0.04 sec)
mysql> select ename from test where deptno=10;
+--------+
| ename |
+--------+
| CLARK |
| MILLER |
+--------+
2 rows in set (0.00 sec)
查看從庫信息:
mysql> select ename from test where deptno=10;
+--------+
| ename |
+--------+
| CLARK |
| MILLER |
+--------+
2 rows in set (0.00 sec)
5、雙主,根據此時從庫的狀態改寫語句
mysql> flush logs;
Query OK, 0 rows affected (0.10 sec)
mysql> show master status \G;
*************************** 1. row ***************************
File: mysql-bin.000015
Position: 120
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:
No query specified
在主庫(03)執行
mysql> CHANGE MASTER TO
-> MASTER_LOG_FILE='mysql-bin.000015',
-> MASTER_LOG_POS=120,
-> MASTER_HOST='192.168.56.34',
-> MASTER_PORT=3306,
-> MASTER_USER='repl',
-> MASTER_PASSWORD='repl';
Query OK, 0 rows affected, 2 warnings (0.08 sec)
8、雙主驗正
原從庫(34)刪除數據
mysql> delete from test where ename = 'MILLER';
Query OK, 1 row affected (0.04 sec)
主庫(03)
mysql> select ename from test where deptno=10;
+-------+
| ename |
+-------+
| CLARK |
+-------+
1 row in set (0.00 sec)
主庫(03)刪除
mysql> delete from test where ename = 'CLARK';
Query OK, 1 row affected (0.06 sec)
(34)驗正
mysql> select ename from test where deptno=10;
Empty set (0.00 sec)
同步正常
有人對主從log的對應關係搞不清楚,下面用圖形表示下