十三、MySQL主从同步

一、什么是mysql主从同步
主master库:正在被客户端访问的数据库服务器,被称作主库服务器。
从slave库:自动同步主库上的数据到本机的数据库服务器,被称作从库服务器。
作用: 实现数据的自动备份
 二、配置mysql主从同步
数据库服务器 192.168.4.51  做主库    数据库服务器 192.168.4.52  做从库
 主从同步未配置之前,要保证从库上要有主库上的数据(从库数据要包含主库全部数据,可以多于主库数据)。
禁用selinux :setenforce  0        关闭防火墙服务:systemctl  stop firewalld
物理连接正常 ]#  ping   -c   2   192.168.4.51/52     数据库正常运行,管理可以从本机登录
 配置mysql主从同步
相关命令
mysql> show  slave  status\G;  # 显示从库状态信息
mysql> show master status\G;  #显示本机的binlog日志文件信息
mysql> show  processlist;  #查看当前数据库服务器上正在执行的程序
mysql> start  slave ; #启动slave 进程
mysql> stop  slave ; #停止slave 进程
mysql> change  master  to  master_host="主库ip地址", master_user="主库授权用户名",master_password="授权用户密码", master_log_file="主库binlog日志文件名", master_log_pos=binlog日志文件偏移量;      //指定主数据库服务器的信息
配置主库
vim /etc/my.cnf             //1. 启用binlog日志
[mysqld]
server_id=51     #节点id,确保唯一
log_bin=master51   #开启mysql的binlog日志功能
binlog_format="mixed"  #设置binlog日志格式,mysql默认采用statement,建议使用mixed
systemctl restart mysqld       //重启服务
mysql> grant replication slave on *.* to  repluser@"192.168.4.52" identified by"123456";   //2.创建用户授权
mysql> show master status;          //3.查看正在使用binlog日志信息
 配置从库
mysql -h192.168.4.51 -urepluser -p123456                //1.验证主库的用户授权
vim /etc/my.cnf
[mysqld]
server_id=52                             //2.指定server_id
systemctl restart mysqld       //重启服务
change master to  master_host="192.168.4.51", master_user="repluser", master_password="123456", master_log_file="master51.000001",master_log_pos=750;  //2.数据库管理员本机登录,指定主数据库服务器的信息
mysql> start  slave ;                     //3.启动slave 进程
mysql> show slave status;               //4.查看从库进程状态信息,Slave_IO_Running: Yes Slave_SQL_Running: Yes 需为yes
在客户端测试主从同步配置
在主库服务器上添加访问数据时,使用连接用户,客户端使用主库的授权用户,连接主库服务器,建库表插入记录,在从库本机,使用管理登录查看是否有和主库一样库表记录及授权用户,客户端使用主库的授权用户,连接从库服务器,也可以看到新建的库表及记录
三、mysql主从同步的工作原理(同步执行sql命令)
从库数据库目录下的文件:
master.info  记录主库信息
主机名-relay-bin.XXXXXX  中继日志文件,记录主库上执行过的sql命令
主机名-relay-bin.index 索引文件,记录当前已有的中继日志文件
relay-log.info  中继日志文件,记录当前使用的中继日志信息
从库IO线程 和SQL线程的作用?
IO线程  把主库binlog日志里的sql命令记录到本机的中继日志文件,主库Binlog Dump 进程告诉从库主库binlog有更新
SQL线程  执行本机中继日志文件里的sql命令,把数据写进本机。
 报错:
IO线程报错原因:从库连接主库失败(ping   grant   firewalld  selinux),从库指定主库的日志信息错误(日志名   偏移量)
Last_IO_Error: 报错信息,IO线程报错原因
注如果上述都没出现问题:可能是另外一种原因mysql uuid的问题 原因:mysql 有个uuid , 然而uuid 是唯一标识的,所以我克隆过来的uuid是一样的,只需要修改一下uuid 就ok了,找到auto.cnf 文件修改uuid
解决办法:找到auto.cnf 修改uuid  :find -name auto.cnf
 SQL线程报错原因:执行本机中继日志文件里的sql命令,用到库或表在本机不存在。
Last_SQL_Error: 报错信息
 change配置错误修改步骤:
mysql> stop  slave;
mysql>  change  master  to   选项="值";
mysql> start  slave;
 设置从库暂时不同步主库的数据?
mysql> stop  slave;     //在从库上把slave 进程停止
 把从库恢复成独立的数据库服务器?
]# rm -rf  /var/lib/mysql/master.info 主机名-relay-bin.XXXXXX   主机名-relay-bin.index   relay-log.info
]# systemctl  restart mysqld
 四、mysql主从同步常用配置参数
主库服务器在配置文件my.cnf 使用的参数(对所有从库生效)
[mysqld]
binlog_do_db=库名列表      #只允许同步库
binlog_Ignore_db=库名列表    #不允许同步库
 从库服务器在配置文件my.cnf 使用的参数(只对设置的从库生效)
[mysqld]
log_slave_updates          //级联复制,记录从库更新,允许链式复制( A-B-C )
relay_log=中继日志文件名    //指定中继日志文件名
replicate_do_db=库名列表     //只同步的库,仅复制指定库,其他库将被忽略,此选项可设置多条(省略时复制所有库)
replicate_ignore_db=库名列表     //不同步的库, ignore-db 与 do-db 只需选用其中一种
]#  systemctl  restart  mysqlds
把从库恢复成独立的数据库服务器?
]# rm -rf  /var/lib/mysql/master.info 主机名-relay-bin.XXXXXX   主机名-relay-bin.index   relay-log.info
]# systemctl  restart mysqld

十三、MySQL主从同步

上一篇:分布式系统:持续一致性


下一篇:MySQL中函数分类