MySQL5.7配置主从复制

为什么使用主从架构?

1、实现服务器负载均衡;

2、通过复制实现数据的异地备份;

3、提高数据库系统的可用性;

4、可以分库【垂直拆分】,分表【水平拆分】;

主从配置的前提条件

1、MySQL版本一致;

2、MySQL中的数据一致;

3、操作前停止一切更新操作(写入、更新、删除等);

4、服务器时间一致

主:192.168.26.119

从:192.168.26.120

注意:119、120服务器安装mysql可参看另一篇博客https://blog.****.net/kuyongganggang/article/details/103647754,mysql用户名/密码:root/123456。

注意点:

1、一定要保证两台服务器的时间是同步的,如果不同步无法实现mysql主从配置;

2、设置服务器具体时间:date -s 12:23:23,通过xshell客户端实现;

1、配置master(主服务器)

vim /etc/my.cnf

#[必须]启用二进制日志

log-bin=my-bin

#[必须]服务器唯一ID,默认是1,一般取IP最后一段

server-id=119

MySQL5.7配置主从复制

查询master(主服务器)的状态

show master status;

MySQL5.7配置主从复制

 

File列和Position列的值一会儿我们要用到。

在主服务器上创建备份专用帐户

mysql -uroot -p123456 -e "GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO 'backup'@'192.168.26.%' IDENTIFIED BY '123456';"

###刷新权限

mysql -uroot -pattack -e "flush privileges;"

备份专用帐户及密码:backup/123456

2、配置slave(从服务器)

vim /etc/my.cnf

#[可选]启用二进制日志

log-bin=my-bin

#[必须]服务器唯一ID,默认是1,一般取IP最后一段

server-id=120

如果你的从服务器下面再挂从服务器,启用二进制日志就是必选的!

注意:由于此时的mysql已经启动过,会自动保留一个uuid的服务编号,这个编号文件(auto.cnf)如果不删除,无法实现主从;

3、重启mysql服务

service mysqld restart

重启的目的是使用刚才的配置生效,主从都需要重启;

4、配置Slave启动主从复制

  • 进入到mysql命令窗口之中:mysql -uroot -p123456
  • 如果现在你已经启动从主机,先关闭:stop slave
  • 如果停止之后还想重新启动,则必须清除所有的日志信息:flush logs;
  • 配置从服务器复制功能

//注意master_log_pos值经常会变化,记得执行如下命令前先执行"show master status;",得到最新的Position列,154数字前后无单引号。

change master to master_host='192.168.1.60',MASTER_PORT=3306,master_user='backup',master_password='[email protected]',master_log_file='mysql-bin.000001',master_log_pos=154; start slave;

参数描述:

master_host=主服务器IP

master_user=在主服务器上创建的备份用户名

master_password=备份用户密码

master_log_file=查询master(主服务器)的状态得到的File列的值

master_log_pos=Position列的值

start slave:启动从服务器复制功能

5、检查从服务器复制状态

mysql -uroot -p123456 -e 'show slave status';

MySQL5.7配置主从复制

 

主要查看以下两项:

Slave_IO_Running: Waiting for master to send event

Slave_SQL_Running: Yes

Slave_IO及Slave_SQL进程必须正常运行,即YES状态,否则都是错误的状态(如:其中一个NO均属错误)。

以上操作过程,主从服务器配置完成。

6、主服务器测试

MySQL5.7配置主从复制

7、从服务器测试

MySQL5.7配置主从复制

可以看到,从库已经同步了主库刚刚创建的test库。

8、注意事项

延迟问题:

  • 当主库的TPS并发较高时,由于主库上面是多线程写入的,而从库的SQL线程是单线程的,导致从库SQL可能会跟不上主库的处理速度(生产者比消费者快,导致商品堆积)。

延迟解决:

网络方面:将从库分布在相同局域网内或网络延迟较小的环境中。

硬件方面:从库配置更好的硬件,提升随机写的性能。

配置方面:从库配置sync_binlog=0,innodb_flush_log_at_trx_commit=2,logs-slave-updates=0,增大innodb_buffer_pool_size,让更多操作在Mysql内存中完成,减少磁盘操作。或者升级Mysql5.7版本使用并行复制。

架构方面:比如在事务当中尽量对主库读写,其他非事务中的读在从库。消除一部分延迟带来的数据库不一致。增加缓存降低一些从库的负载。