1、主从数据库的作用

其中Master负责写操作的负载,也就是说一切写的操作都在Master上进行,而读的操作则分摊到Slave上进行。这样一来的可以大大提高读取的效率。在一般的互联网应用中,经过一些数据调查得出结论,读/写的比例大概在 10:1左右 ,也就是说大量的数据操作是集中在读的操作,这也就是为什么我们会有多个Slave的原因。但是为什么要分离读和写呢?熟悉DB的研发人员都知道,写操作涉及到锁的问题,不管是行锁还是表锁还是块锁,都是比较降低系统执行效率的事情。我们这样的分离是把写操作集中在一个节点上,而读操作其其他的N个节点上进行,从另一个方面有效的提高了读的效率,保证了系统的高可用性。

2、主从配置之前的须知

MySQL主从复制要求版本最好一致,至少前两个版本号相同,因为官方推荐这样,最主要还是怕版本不一致带来的不兼容问题。
首先注意的是,搭建好一台虚拟机Centos7的MySQL,以及你本机的MySQL,我这里是用本机MySQL作为主,用虚拟机作为从,此篇教程略过搭建系统和MySQL的过程,直接讲配置。

3、主服务器MySQL版本8.0.19

宝塔 mysql 读写分离 mysql8读写分离_linux

4、从服务器MySQL版本8.0.20

宝塔 mysql 读写分离 mysql8读写分离_java_02

5、修改主服务器MySQL的my.cnf配置文件

主服务器MySQL的具体的三项配置,保存之后记住重启MySQL。

#skip-networking  
  
  # Replication Master Server (default)  
  # binary logging is required for replication  
  log-bin=mysql-bin  
    
    # binary logging format - mixed recommended  
    binlog_format=mixed  
      
      # required unique id between 1 and 2^32 - 1  
      # defaults to 1 if master-host is not set  
      # but will not function as a master if omitted  
      server-id   = 131

宝塔 mysql 读写分离 mysql8读写分离_linux_03


宝塔 mysql 读写分离 mysql8读写分离_数据库_04

6、修改从服务器MySQL的my.cnf配置文件

从服务器MySQL的具体的三项配置,保存之后记住重启MySQL。

log_bin=mysql-bin
binlog_format=mixed
server_id = 104

宝塔 mysql 读写分离 mysql8读写分离_java_05


宝塔 mysql 读写分离 mysql8读写分离_mysql_06

7、在主库的MySQL创建用于复制操作的用户
##创建用户
CREATE USER 'Slave1'@'192.168.62.131' IDENTIFIED WITH mysql_native_password BY 'Slave_xiaoxuan123';

宝塔 mysql 读写分离 mysql8读写分离_java_07

##给用户授权
GRANT REPLICATION SLAVE ON *.* TO 'Slave1'@'192.168.62.131';

宝塔 mysql 读写分离 mysql8读写分离_宝塔 mysql 读写分离_08

##刷新权限信息
flush privileges;

宝塔 mysql 读写分离 mysql8读写分离_java_09

8、获取文件名和位置
SHOW MASTER STATUS;

宝塔 mysql 读写分离 mysql8读写分离_数据库_10

9、在从(Slave)库设置参数
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.104',
MASTER_USER='Slave1',
MASTER_PASSWORD='Slave_xiaoxuan123',
MASTER_LOG_FILE='mysql-bin.000006',
MASTER_LOG_POS=870;

宝塔 mysql 读写分离 mysql8读写分离_数据库_11

10、查看主从同步状态
show slave status\G;

宝塔 mysql 读写分离 mysql8读写分离_java_12

11、开启主从同步
start slave;
12、再次查看
show slave status\G;

宝塔 mysql 读写分离 mysql8读写分离_宝塔 mysql 读写分离_13

13、在主库创建数据库进行测试
##创建名为xiaoxuan的数据库进行测试
Create database xiaoxuan;

宝塔 mysql 读写分离 mysql8读写分离_mysql_14


宝塔 mysql 读写分离 mysql8读写分离_java_15

14、去从库看看会不会产生xiaoxuan的数据库

宝塔 mysql 读写分离 mysql8读写分离_mysql_16

15、注意事项

每次主服务器,重新启动MySQL后,position参数位置需要改变,也就是上面的第9步的最后一位参数需要改变,当然ip地址也是一样,如果服务器ip地址经常性修改,则也要修改,不过这种情况很少,重启MySQL的情况比较多。