數據庫複製的原理:master將操作記錄到二進制日誌binlog,slave的IO線程連接master的dump線程來讀取binlog並將其保存至中繼日誌relaylog,slave的另外一個SQL線程去重放relay-log中的操作來實現和master數據同步。
一、實現環境
centos
master:172.16.20.245
slave:172.16.20.219
兩數據庫均是新安裝
二、master安裝配置
1master修改配置文件
#vim /etc/my.cnf
[mysqld]
log-bin = master-bin #開啓二進制日誌
log-bin-index = master-bin.index #二進制日誌索引
binlog_format=mixed #二進制日誌格式,另外兩種stament、row
innodb_file_per_table=1 #爲innodb表格開啓獨立表空間
sync-binlog = 1 #用於提高數據安全性
innodb_flush_log_at_trx_commit=1 #提高innodb複製的一致性
server-id = 10 #指定唯一的server-id
#service mysqld restart
2創建複製用戶
mysql>grant replication slave on *.* to 'user'@'172.16.20.%' identified by 'password';
mysql>flush privileges;
3記錄master二進制日誌記錄位置
mysql> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 341 | | |
+-------------------+----------+--------------+------------------+
#創建用戶記錄在二進制日誌中,使其position不是107
三、slave安裝配置
1slave修改配置文件
#vim /etc/my.cnf
[mysqld]
relay-log=relay-log #開啓中繼日誌
relay-log-index=relay-log.index #中繼日誌索引
innodb_file_per_table=1
read_only=1 #slave只讀設置,保持主從數據同步
skip-slave-start=1 #服務器啓動時跳過複製,需要手動start slave
server-id=20 #指定server-id,與master必須不同
#service mysqld restart
2啓動複製
mysql>CHANGE MASTER TO
MASTER_HOST='172.16.20.245',
MASTER_USER='user',
MASTER_PASSWORD='passwd',
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=341;
mysql>start slave;
#或者單獨START SLAVE IO_Thread;START SLAVE SQL_Thread;來啓動這兩個線程
3檢查
mysql>show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上連個進程啓動則表示主從複製啓動,主從複製安裝完成。
四、數據庫複製過濾
master
[mysqld]
binlog-do-db=testdb
binlog-do-db=mydb
僅將指定數據庫的相關修改操作記入二進制日誌,造成主端二進制日誌不完整
binlog-ignore-db=mysql
將指定數據庫的相關修改操作不記入二進制日誌,造成主端二進制日誌不完整
slave
[mysqld]
replicate_do_db=test
只複製test數據庫
rpplicate_ignore_db=test
不復制test數據庫
支持表級複製
replicate_do_table
replicate_ignore_table
replicate_wild_do_table (可支持通配符,% _)
replicate_wild_ignore_table
建議:使用複製過濾一般在slave上,這樣可以保證master二進制日誌的完整性。