数据库复制的原理: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二进制日志的完整性。
本文出自 “不莱梅乐队” 博客,谢绝转载!