準(zhǔn)備
1. 兩臺mysql服務(wù)器:主(14.152.86.32)、從
2. 主服務(wù)器的端口對從服務(wù)器開放
配置步驟
1. master開啟bin-log
2. slave開啟relay-log
3. slave關(guān)聯(lián)master
(master)主服務(wù)器配置
配置my.cnf
# server 唯一標(biāo)識
server-id= 1
# binlog文件名,自定義
log-bin=mysql-bin
# binlog文件的索引文件,默認(rèn)為log-bin文件名加后綴.index
bin-log-index=mysql-bin.index
# binary log格式: STATEMENT, ROW, MIXED鄙煤。默認(rèn)為STATEMENT
binlog_format=mixed
查看master狀態(tài)
- 重啟mysql:
/etc/init.d/mysqld restart
- 進(jìn)入mysql查看狀態(tài):
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000042 | 10690718 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
- mysql-bin.000042 : 當(dāng)前binlog文件名(在從庫關(guān)聯(lián)時(shí)使用)舌剂。
- position: 日志最新結(jié)點(diǎn)(在從庫關(guān)聯(lián)時(shí)使用)钠四。
創(chuàng)建新用戶踱阿,用于從服務(wù)器同步
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slaveuser'@'%' identified by '123456';
Query OK, 0 rows affected (0.03 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
(slave)從服務(wù)器配置
配置my.cnf
# server唯一標(biāo)識
server_id=2
# 中繼日志文件名
relay-log=slave-relay-bin
# 中繼日志的索引文件透罢,默認(rèn)為relay-log-index文件名加后綴.index
relay-log-index=slave-relay-bin.index
重啟要门,進(jìn)行slave關(guān)聯(lián)master
- 重啟mysql:
/etc/init.d/mysqld restart
- 關(guān)聯(lián)主從
mysql> change master to
-> master_host='14.152.86.32',
-> master_user='slaveuser',
-> master_password='123456',
-> master_log_file='mysql-bin.000042',
-> master_log_pos=10690718;
Query OK, 0 rows affected, 2 warnings (0.11 sec)
- 啟動slave虏肾,并查看狀態(tài)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 14.152.86.32
Master_User: slavessg
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000042
Read_Master_Log_Pos: 10690718
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 1181
Relay_Master_Log_File: mysql-bin.000042
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: area
...
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
...
- 當(dāng)
Slave_IO_Running: Yes,Slave_SQL_Running: Yes
這兩項(xiàng)是Yes時(shí)欢搜,啟動成功医咨。 - 否則可以在xx_Error中查看錯(cuò)誤信息悬钳。
- 停止slave
mysql> stop slave;
Query OK, 0 rows affected (0.03 sec)
測試
- master mysql:創(chuàng)建新庫
- 查看slave mysql 是否同步該庫
================ Happy Ending~ =======================
補(bǔ)充幾點(diǎn)
查找my.cnf位置
終端執(zhí)行: mysql --help | grep my.cnf
,查看my.cnf文件列表,越靠前的my.cnf優(yōu)先級越高监憎,通常配置 /etc/my.cnf
即可。
? mysql --help | grep my.cnf
order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf
(master)主服務(wù)器my.cnf可選配置
# 僅將指定庫的相關(guān)修改操作記入二進(jìn)制日志(白名單)
binlog-do-db = DB_NAME
# 忽略指定庫的相關(guān)操作記錄二進(jìn)制日志,其余的都記入二進(jìn)制日志(黑名單)
binlog-ignore-db = DB_NAME
(slave)從服務(wù)器my.cnf可選配置
# 是否只讀:1只讀,0可讀可寫
read_only=1
# 基于庫做白名單過濾,如:只同步area庫
replicate-do-db = area
# 基于庫做白名單過濾粘都,如:只同步area庫的city表
replicate-do-table = area.city
# 基于庫做黑名單過濾,如:不同步mysql庫和test庫
binlog-ignore-db = mysql
binlog-ignore-db=test
# 基于表做黑名單過濾刷袍,如:不同步mysql庫的user表
binlog-ignore-table=mysql.user
mysql版本
- mysql向后兼容翩隧,要保證主庫的語句在從庫中能夠執(zhí)行,從庫版本要高于/等于主庫呻纹。