本文使用apt-get方式安装,其他方式安装配置文件路径可能会有所差异

安装

apt-get update
apt-get install mysql-server-5.7
apt-get install mysql-client-5.7

配置master

修改/etc/mysql/mysql.conf.d/mysqld.cnf

#server-id给数据库服务的唯一标识
server-id=1

#log-bin设置此参数表示启用binlog功能,并指定路径名称
log-bin=/var/lib/mysql/mysql-bin
sync_binlog=0
#设置日志的过期天数
expire_logs_days=7
#binlog_cache_size此参数表示binlog使用的内存大小
binlog_cache_size=1M

使用mysql命令登录mysql,添加同步账号

create user 'repl'@'%' identified by 'RepL@)18';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
GRANT ALL ON *.* TO `repl`@`%`;
GRANT ALL ON `dmp`.* TO `repl`@`%` ;
FLUSH PRIVILEGES;

上面三个GRANT少一个也无法成功,网上好多教程都会少一条,踩了半天坑才成功。一定要注意设置设置账号为从服务器账号的同时要给全部权限,还要给单个数据库全部权限,如果多个数据库,需要给多个数据库单独指定权限GRANT ALL ONdmp.* TOrepl@%; 查看配置是否生效

mysql> show master status;

出现如下提示

mysql 怎么判断主从 mysql5.7主从_mysql


记住上面的file和postion,配置从库时会用到。接下来可以使用同步从服务器的同步账号登录是意思啊,进入mysql后执行show databases;看能否找到要同步的数据库,如果没有,说明配置有问题。

配置slave

修改/etc/mysql/mysql.conf.d/mysqld.cnf

#server-id给数据库服务的唯一标识
server-id=2
#read_only设置数据库为只读,防止从库数据修改后,主从数据不一致,但是有Super权限的账号还是有写的权限,所以要某个账号只读的话,可以去掉账号的Super权限
read_only=1

#指定需要同步的表
replicate-wild-do-table=ljzxdb.%
#binlog_cache_size此参数表示binlog使用的内存大小
binlog_cache_size=1M

重启mysql然后,进入

mysql> CHANGE MASTER TO MASTER_HOST='172.16.0.102', MASTER_USER='repl', MASTER_PASSWORD='LENGjing@2*8#3&7', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=15051;

还记得主库执行show master status; 时看到的内容吗
上面的master_log_file是在Master中show master status显示的File,而master_log_pos是在Master中show master status显示的Position。 然后可以通过show slave status查看配置信息。如果没有同步成功,请查看show slave status中的position和file是否和master中的对应了。

mysql> show slave status \G;

mysql 怎么判断主从 mysql5.7主从_mysql 怎么判断主从_02


观察这两个值是否都是yes,Slave_IO_Running: Yes 和Slave_SQL_Running: Yes,如果都是yes,说明运行正常。

如果出现同步失败,可以根据提示处理错误,处理完成后,需要刷新同步配置:
先停止同步

mysql> stop slave;

清理掉之前的配置,防止同步已经同步了的数据

mysql> reset slave all;

然后重新连接主库,进行同步。

不知道为什么我配置好了,过段时间会断开,原因是因为主库的MASTER_LOG_FILEMASTER_LOG_POS会变化,但是从库却不会自动更新