本文章主要介绍了如何将在linux通过Mysql配置主从数据库,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

一、安装Mysql
安装参考:linux通过yum安装Mysql

二、主从复制简介

  1. 在业务中保证Mysql单点故障以及提高整体服务性能,一般会采用主从复制
  2. mysql主从保证数据一致 mysql主从复制保证数据一致_mysql

  3. 主从复制策略:
- 同步策略:Master会等待所有的Slave都回应后才会提交,这个主从同步会严重影响性能
 - 半同步策略:Master至少会等待一个Slave回应后提交
 - 异步策略:Master不用等待Slave回应就可以提交
 - 延迟策略:Slave要落后于Master指定的时间
  1. 主从同步事件(binlog三种模式)
#查询:show variables like '%log_format%';
#可在my.cnf中配置:binlog_format=“STATEMENT”
1.STATEMENT:每一条会修改数据的 SQL 都会记录在 binlog 中(记录每一条修改数据的SQL语句,对函数、存储过程无法准确的复制)
2.Row:不记录 SQL 语句上下文信息,仅保存哪条记录被修改(记录每一行修改的数据,会产生大量的binlon日志)
3.Mixed:Statement 和 Row 的混合体。决定什么时候写statement格式的,什么时候写row格式的binlog
  1. 同步原理
当master主库数据发生更新时,会将更新日志写入到binlog日志中
当slave从库连接master主库时,master会创建相对应的binlog dump 线程
当master中的binlog发生改变时,binlog dump thread线程会通知所有的slave从库节点,并将对应的binlog内容推送到slave从库节点中
当slave从库启动时会创建I/O thread线程,该线程用于请求Master主库会返回binlog的名称以及当前数据更新的位置、binlog文件位置等内容
当I/O线程接收到binlog内容后,将内容写入到本地的relay-log日志中
当slave从库中的SQL thread线程检测到relay-log日志有更新时,就会根据relay-log中的内容对slave从库数据库做对应的操作
  1. 主要线程:Master (binlog dump thread)、Slave(I/O thread、SQL thread);Mastre一个线程和Slave两个线程
  2. 主要日志:binlog、relay-log

三、主从复制配置

  1. Master主库配置
  • 用户权限设置
创建同步账号:create user 'syncuser'@'%' IDENTIFIED BY 'A@123456';
授予file权限:grant file on *.* to 'syncuser'@'%';
赋予用户主从复制权限:GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'syncuser'@'%';
  • 配置my.cnf
配置my.cnf文件:
vi /etc/my.cnf
---
#配置编码为utf8
character_set_server=utf8mb4
init_connect='SET NAMES utf8mb4'

#配置主服务器ID,在主从中唯一值
server-id=3  
#启用二进制日志
log-bin=mysql-bin
#自动清理30天前的log文件
expire_logs_days=30

#可配置给Slave同步的数据库,默认同步所有数据库
#binlog-do-db=test
#可配置不给Slave同步的数据库
#binlog-ignore-db=mysql
---
  • 配置完成后重启mysql服务:systemctl restart mysqld
  • 查看log_bin日志是否启动成功:show variables like ‘%log_bin%’;
  • mysql主从保证数据一致 mysql主从复制保证数据一致_mysql主从保证数据一致_02

  • 查看Master主库的状态(File、Position这两个数据需要记住,后面配置Slave从库需要用到)
  • mysql主从保证数据一致 mysql主从复制保证数据一致_SQL_03

  1. Slave从库配置
  • 用户权限设置
创建同步账号:create user 'syncuser'@'%' IDENTIFIED BY 'A@123456';
赋予用户所有权限:grant all privileges on *.* to 'syncuser'@'%';
  • 配置my.cnf
配置my.cnf文件:
vi /etc/my.cnf
---
#配置从服务器ID,在主从中唯一值
server-id=4

#加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE
  • 配置完成后重启mysql服务:systemctl restart mysqld
  • 在Slave从库中添加Master主库的信息
#master_host主库ip地址
#master_user主库同步用户
#master_port主库连接端口
#master_password主库同步用户密码
#master_log_file为master主库中的File值
#master_log_pos为master主库中的Position值
change master to master_host='192.168.1.xx',master_user='syncuser',master_port=3306,master_password='A@123456',master_log_file='mysql-bin.000001',master_log_pos=2958;
  • 查看Slave从库的状态
  • 当看到Slave_IO_Running和Slave_SQL_Running状态都是Yes的时候,表示主从配置成功,如果状态不成功,如下操作
#检查添加master主库信息是否正常
#重启slave服务
stop slave;
start slave;
#保证状态为Yes时即可
  • 测试主库添加表数据,从库是否有对应的数据

四、常用binlog命令

#查看所有 binlog 日志
show master logs;

#查看 master 状态
show master status;

#刷新 binlog(刷新后日志会记录到新的 binlog 日志文件中)
flush logs;

#重置 binlog(重置会导致从库找不到对应的binlog日志)
reset master

#查看 binlog
show binlog events in 'mysql-bin.000001';
或者通过mysqlbinlog查看,例如 mysqlbinlog -v mysql-bin.000001

如果本文对您有一点点帮助,可以点赞、关注、收藏一下