mysql5.7搭建主从同步(详细教程!!!)
mysql5.7主从同步
系统环境:
centOS7.x
mysql-5.7.29
两台服务器上都部署好mysql5.7
MySQL搭建主从优点:
1、简单主从一般为一主一从,部署在不同服务器上,可以防止单一主机的数据丢失,提高数据的安全性
2、主机宕机的时候,可以快速切换到从库提供服务,使业务系统能够正常运转
3、实现读写分离,访问从库上执行读取查询操作,主库执行增改删操作
4、在从库中执行备份,以避免备份期间影响主库的服务。
5、在从库服务器上做数据报表和数据统计,可以避免生产服务器的访问压力过大。
下面开始搭建mysql主从分离
1、修改两台服务器mysql的my.cnf配置文件,主要内容要新增在[mysqld]下面
主库:
###服务器id标识,不可重复
server_id=1
###开启日志文件,路径可自定义
log-bin=/opt/mysql-5.7.29/log-bin/mysql-bin
说明:若需要同步指定库,binlog_do_db配置要写在主库my.cnf配置文件中
主库不加binlog_do_db配置从库会同步主库所有库
从库的binlog_do_db配置可加可不加
从库:
###从服务器server_id
server_id=2
###开启日志文件,路径可自定义
log-bin=/opt/mysql-5.7.29/log-bin/mysql-bin
###需要同步数据库,如果有多个逗号分隔,(可选)
binlog_do_db=hcp
2、启动主库,从库的mysql服务,这里需要注意的是,需要保证主从初始的库表数据一致,否则从库容易出错
service mysqld start
3、进入到mysql的bin目录下,登录主服务器,查看master状态
登陆指令:./mysql -u username -p password
show master status;
4、 登录从服务器,设置主从关系,最后的master_log_file和master_log_pos来源于主库
change master to master_host='10.70.25.208',master_user='root',master_password='root',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=2934;
设置主从关系的时候需要先stop slave,停止从库同步,然后在执行指令,否则会报错,原因是slave目前在运行中,需要先关闭
执行完成后启动从库同步,start slave;
5、查看从服务器的主从关系状态
show slave status\G
slave_IO_Running和Slave_SQL_Running均为Yes表示主从搭建成功
6、验证主从同步机制是否正常
创建用于主从测试的数据表user
create table user(id int(11) auto_increment primary key, name varchar(30) )engine=innodb,default charset=utf8;
主服务器上进行插入数据测试
insert into user(name) values(‘小明‘);
登陆从服务器上查看,正常主从库数据一致
select * from user
7、搭建mysql主从最容易的踩的坑
若主从初始化库表不一致,比如主库比从库多一个库或者多一张表,这时候你搭建的从库也能正常与主库设置主从关系,从库也会同步主库的库表数据。但是,你一旦删除主库比从库多出的库或者表,从库就会出错,Slave_SQL_Running 也会变成 NO 查看从库状态会发现有错误,提示你从库没有那个库或者表。
解决方法:
1)若是测试的库表数据,直接上主库删掉测试的库和表,保存主从数据库表一致,然后去到从库重新设置主从关系即可。
2)若是正式数据,需要将主库的数据先导出来,然后导入到从库,保持主从库数据库表一致,然后去到从库重新设置主从关系即可。
重新设置主从关系方法同上述步骤 3、4