MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充
当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这
些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服
务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封
锁并等待主服务器通知新的更新。
请注意当你进行复制时,所有对复制中的表的更新必须在主服务器上进行。否则,你必须要小心,
以避免用户对主服务器上的表进行的更新与对从服务器上的表所进行的更新之间的冲突。
mysql的复制AB复制:两只种
第一种:一对多
master端:
1 | yum install -y mysql-server //mysl的版本要高于3.2,而且slave节点的mysql版本要高与或与master节点一致 |
1.配置文件:
04 | log-bin=mysql-bin #启动二进制日志系统 |
05 | binlog- do -db= test #二进制需要同步的数据库名,如果需要同步多个库,例如要再同步 |
06 | zhangxc库,再添加一行“binlog- do -db=zhangxc",以此类推 |
08 | server- id =1 #必须为 1 到 232–1 之间的一个正整数值 |
09 | binlog-ignore-db=mysql #禁止同步 mysql 数据库 |
2. 启动mysql
3.创建同步账户,并给予授权。
1 | mysql> grant replication slave, reload, super on *.* to zhang@ '192.168.1.43' |
2 | identified by 'zhangxc' ; //43为slave 如果再添加slave,务必再次创建账户并授权。 |
3 | mysql> flush privileges; |
4.调试
1 | mysql> show master status; |
2 | +------------------+----------+--------------+------------------+ |
3 | | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | |
4 | +------------------+----------+--------------+------------------+ |
5 | | mysql-bin.000004 | 106 | test ,zhangxc | mysql | |
6 | +------------------+----------+--------------+------------------+ |
slave1端:
1.安装mysql
1 | yum install -y mysql-server //mysl的版本要高于3.2,而且slave节点的mysql版本要高与或与master节点一致 |
2.配置
4 | server- id =43 #从服务器 ID 号,不要和主 ID 相同,如果设置多个从服务器,每个从服务器必 |
5 | 须有一个唯一的 server- id 值,必须与主服务器的以及其它从服务器的不相同。 |
6 | 可以认为 server- id 值类似于 IP 地址:这些 ID 值能唯一识别复制服务器群集 |
3.启动服务
4.
01 | mysql> change master to master_host= '192.168.1.41' , master_user= 'zhang' , |
02 | master_password= 'zhangxc' , master_log_file= 'mysql-bin.000004' , master_log_pos=106; |
03 | Query OK, 0 rows affected (0.35 sec) |
06 | Query OK, 0 rows affected (0.02 sec) |
07 | mysql> show slave status\G; |
08 | *************************** 1. row *************************** |
11 | Slave_SQL_Running: Yes |
12 | //如果都是 yes ,表示从库的 I/O,Slave_SQL 线程都正确开启.表明数据库正在同步 |
注:在同步之前确保 master 与 slave 上的数据一致性。时间同步。
第二种:线性复制
在添加slave节点:
1. 由于 master 上已经有数据,而新加的 slave2 没有,必须在配置复制前同步数据。
1.1
1 | mysql> FLUSH TABLES WITH READ LOCK; #锁表f防止进行写入数据 |
2 | mysqldump --all-databases --lock-all-tables > zhangxc.db //备份一份让slave2与slave保持相同 |
3 | mysql> UNLOCK TABLES; #表解锁 |
1.2
1 | scp zhangxc.db 192.168.168.1.44: |
slave1端
1.配置文件
2.创建同步账户,并给予授权。(slave1)
1 | mysql> grant replication slave, reload, super on *.* to zhang@ '192.168.1.44' |
2 | identified by 'zhangxc' ; |
3 | Query OK, 0 rows affected (0.02 sec) |
5 | mysql> flush privileges; |
6 | Query OK, 0 rows affected (0.02 sec |
3.重启mysqld
4.测试
1 | mysql> show master status; |
2 | +------------------+----------+--------------+------------------+ |
3 | | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | |
4 | +------------------+----------+--------------+------------------+ |
5 | | mysql-bin.000001 | 106 | test | mysql | |
6 | +------------------+----------+--------------+------------------+ |
slave2端:
1.安装mysql
1 | yum install -y mysql-server |
2.配置
3.启动服务
4.
01 | mysql> change master to master_host= '192.168.1.43' , master_user= 'zhang' , |
02 | master_password= 'zhangxc' , master_log_file= 'mysql-bin.000001' , master_log_pos=106; |
03 | Query OK, 0 rows affected (0.35 sec) |
06 | Query OK, 0 rows affected (0.02 sec) |
07 | mysql> show slave status\G; |
08 | *************************** 1. row *************************** |
11 | Slave_SQL_Running: Yes |
注:在同步之前确保 master 与 slave 上的数据一致性。时间同步。
大家如果对于mysqlAB复制配置有什么疑问,可以向我留言
-------我爱吃葱花