1、主庫開啓binlog日誌
找到主數據庫的配置文件my.cnf,在[mysqld]部分插入如下兩行:
[mysqld]
log-bin=mysql-bin #開啓二進制日誌
binlog_format=mixed
server-id=1 #設置server-id
log-slave-updates=1 #如果主庫是其他庫的從庫的話需要添加此參數,否則從其它庫同步的數據不會寫入binlog
2、重啓mysql,創建用於同步的用戶賬號
mysql -uroot -p
mysql>CREATE USER 'repl'@'172.23.xxx.xxx' IDENTIFIED BY 'repdbxxxxxx';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'172.23.xxxx';
mysql>flush privileges;
3.查看master狀態
首先登陸數據庫,然後刷新所有的表,同時給數據庫加上一把鎖,阻止對數據庫進行任何的寫操作
mysql > flush tables with read lock;
然後執行下面的語句獲取二進制日誌的信息
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 | 2593874 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
記錄二進制文件名(mysql-bin.000002)和位置(2593874)
4、導出數據
mysqldump -uroot -p'123456' -S /data/3306/data/mysql.sock --all-databases > /server/backup/mysql_bak.$(date +%F).sql
如果數據量很大,可以在導出時就壓縮爲原來的大概三分之一
mysqldump -uroot -p'123456' -S /data/3306/data/mysql.sock --all-databases | gzip > /server/backup/mysql_bak.$(date +%F).sql.gz
解壓
gzip -d XXXX.gz
這時可以對數據庫解鎖,恢復對主數據庫的操作
mysql > unlock tables;
5、修改從庫mysql配置
同樣找到my.cnf配置文件,添加server-id
[mysqld]
server-id=2 #設置server-id,必須唯一
重啓mysql服務
6、導入從主庫導出的數據
mysql -uroot -p'123456' -S /data/3306/data/mysql.sock < /server/backup/mysql_bak.2015-07-01.sql
7、配置主從
登陸從庫mysql,輸入如下信息:
複製代碼
mysql> CHANGE MASTER TO
-> MASTER_HOST='172.16.xxxx',
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='repdbxxxxxx',
-> MASTER_LOG_FILE='mysql-bin.000002',
-> MASTER_LOG_POS=2593874;
啓動slave同步進程:
mysql>start slave;
8.查看slave狀態:
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.3.142
Master_User: rep1
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 11662
Relay_Log_File: mysqld-relay-bin.000022
Relay_Log_Pos: 11765
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
...
還可以用到的其他相關參數:
master開啓二進制日誌後默認記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的數據庫甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項:
# 不同步哪些數據庫
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
# 只同步哪些數據庫,除此之外,其他不同步
binlog-do-db = game
如之前查看master狀態時就可以看到只記錄了test庫,忽略了manual和mysql庫。