Mysql主从复制与主主复制
1.环境说明
两台linux虚拟主机
Linux版本CentOS6.5、MySQL 5.7.22
ip:192.168.163.9 (主)、192.168.163.10 (从)
- 主从复制
2.1安装mysql2.2 修改配置文件(my.cnf)
注意:在配置socket文件的目录时,客户端和服务端都要进行配置
开启二进制日志
log_bin=/home/hadoop/apps/mysql/mysqllog/3306/binlog/mysql-bin
二进制日志必须开启,因为数据的同步实质上就是其他的MySQL数据库服务器将这个数据变更的二进制日志在本机上再执行一遍。
2.3主从复制构建
2.3.1 创建用户
在192.168. 163.9中创建一个192.168.163.10主机中可以登录的MySQL用户
用户:hds_admin
密码:hds_admin
mysql>grant replication slave on . to ‘hds_admin’@’192.168.163.10’ identified by ‘hds_admin’;
mysql> flush privileges;
2.3.2 查看主服务器二进制文件名与位置
mysql>SHOW MASTER STATUS;
2.3.3 告知二进制文件名与位置
在192.168.163.10(从)中执行:
2.3.3.1关闭slave服务:
mysql> stop slave;
2.3.3.2同步主机信息:
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.163.10',
-> MASTER_USER='hds',
-> MASTER_PASSWORD='hds_admin',
-> MASTER_LOG_FILE='mysql-bin.000006',
-> MASTER_LOG_POS=597;
2.4测试主从复制
在192.168.163.10(从)服务器运行
2.4.1 配置查看
mysql> start slave;
mysql>SHOW SLAVE STATUS\G #查看主从复制是否配置成功
(1)常见错误
以上不配置不成功的,原因可能有三:
1、网络不通
2、密码不对
3、pos不对
经过检查,用户名写成了数据库名
(2)Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
原因:上面报错说的是replication架构中需要保证每个mysql实例UUID(UUID保存在datadir目录下的auto.cnf文件中)唯一,就跟server_id一样需要保证主从架构中所有mysql实例server_id唯一。
之所以出现会出现这样的问题,是因为我的从库主机是克隆的主库所在的主机,所以auto.cnf文件中保存的UUID会出现重复(server_id已经在my.cnf文件中修改过)
解决方法:停掉备库实例,删除备库的auto.cnf文件,启动备库实例,此时备库就会产生一个新的auto.cnf文件(产生新的UUID)
配置成功标志
2.4.2 实际数据测试
2.4.2.1未实现主从复制原因
1、SHOW SLAVE STATUS\G报错
Last_Errno: 1008
Last_Error: Error ‘Can’t drop database ‘just’; database doesn’t exist’ on query. Default database: ‘just’. Query: ‘drop database just’
原因:如果主从环境删除要先在主库删除,不要在从库做删除,不然SQL线程永远识别不了
解决方法:
stop slave;
create database jishibang;
start slave;
show slave status;
缺点:主从复制只能在主数据库上进行数据的修改,从数据库相当于主数据库的一个数据备份。
3.主主复制
192.168.163.11 192.168.163.12
主主复制即在两台MySQL主机内都可以变更数据,而且另外一台主机也会做出相应的变更。
3.1安装mysql3.2 修改配置文件
192.168.163.11
server-id=11 #任意自然数n,只要保证两台MySQL主机不重复就可以了。
log-bin=mysql-bin #开启二进制日志
auto_increment_increment=2 #步进值auto_imcrement。一般有n台主MySQL就填n
auto_increment_offset=1 #起始值。一般填第n台主MySQL。此时为第一台主MySQL
binlog-ignore=mysql #忽略mysql库【我一般都不写】
binlog-ignore=information_schema #忽略information_schema库【我一般都不写】
replicate-do-db=aa #要同步的数据库,默认所有库
192.168.163.12
server-id=12
log-bin=mysql-bin
auto_increment_increment=2
auto_increment_offset=2
replicate-do-db=aa
配置好后重启数据库
3.3构建主主复制
就是在两个服务器上双向配置主从复制;
3.4测试主主复制
分别开启start slave;
mysql>SHOW SLAVE STATUS\G #查看主从复制是否配置成功
当看到Slave_IO_Running: YES、Slave_SQL_Running: YES才表明状态正常
测试:在192.168.163.11上面执行
mysql>use hds;
mysql>create table tab1(id int auto_increment,name varchar(10),primary key(id));
mysql>insert into tab1 (name) values (‘zhao1’);
登录192.168.163.12查看
mysql>use hds;
mysql>show tables;
mysql>select * from tab1;
3.5说明
主主复制配置文件中auto_increment_increment和auto_increment_offset只能保证主键不重复,却不能保证主键有序。
4.主从复制与主主复制的区别
最大区别是 主从是对主操作数据,从会实时同步数据。反之对从操作,主不会同步数据,还有可能造成数据紊乱,导致主从失效。 主主则是无论对那一台操作,另一个都会同步数据。一般用作高容灾方案