MySQL高可靠性数据同步

生存还是毁灭,这是个值得考虑的问题。——莎士比亚《哈姆雷特》

在实际的生产中,为了解决MySQL的单节点故障已经提高MySQL的整体服务性能,一般都

会采用主从复制

举例:

当在一个复杂的业务系统中执行一条SQL语句时,如果这条SQL语句导致数据库表被锁定,并且执行时间较长,那么整个系统可能会因为这个SQL语句的执行而无法提供正常的服务,从而影响用户的体验。

简单来说,就好比你在超市排队结账,突然有人拿着一大堆商品在结账台上慢慢核对价格,导致后面的人都得等待。这个过程中,其他顾客无法快速结账,整个结账过程变得缓慢,影响了大家的购物体验。

在数据库中,如果一条SQL语句执行期间锁定了重要的数据库表,并且执行时间很长,那么其他操作可能需要等待这条SQL语句执行完成才能继续进行,这就会导致整个系统的服务暂时不可用,用户可能会感受到延迟或无法正常使用系统的问题。为了避免这种情况,需要在设计数据库和编写SQL语句时考虑到效率和并发性,以确保系统能够快速响应用户请求并保持稳定运行。

主从复制(Master-Slave Replication)是一种数据库复制技术,通常用于创建数据备份、提高系统可用性以及实现读写分离。在主从复制中,一个数据库服务器充当主服务器(Master),负责处理写操作和更新数据;而其他一个或多个数据库服务器则作为从服务器(Slave),复制主服务器的数据,并通常用于处理读操作。

主从复制的工作原理很简单:主服务器上的数据变化会被记录在二进制日志中,并通过网络传输到从服务器。从服务器接收到这些变化记录后,将其应用到自己的数据库中,从而保持与主服务器数据的一致性。

Mysql的主从复制中主要有三个线程:master(binlog dump thread)、slave(I/O thread 、SQL thread),Master一条线程和Slave中的两条线程。

master(binlog dump thread)主要负责Master库中有数据更新的时候,会按照binlog格式,将更新的事件类型写入到主库的binlog文件中。

并且,Master会创建log dump线程通知Slave主库中存在数据更新,这就是为什么主库的binlog日志一定要开启的原因。

I/O thread线程在Slave中创建,该线程用于请求Master,Master会返回binlog的名称以及当前数据更新的位置、binlog文件位置的副本。

然后,将binlog保存在 「relay log(中继日志)」 中,中继日志也是记录数据更新的信息。

SQL线程也是在Slave中创建的,当Slave检测到中继日志有更新,就会将更新的内容同步到Slave数据库中,这样就保证了主从的数据的同步。

以上就是主从复制的过程,当然,主从复制的过程有不同的策略方式进行数据的同步,主要包含以下几种:

「同步策略」:Master会等待所有的Slave都回应后才会提交,这个主从的同步的性能会严重的影响。

「半同步策略」:Master至少会等待一个Slave回应后提交。

「异步策略」:Master不用等待Slave回应就可以提交。

「延迟策略」:Slave要落后于Master指定的时间。

对于不同的业务需求,有不同的策略方案,但是一般都会采用最终一致性,不会要求强一致性,毕竟强一致性会严重影响性能。

安装前准备

MySQL :: Download MySQL Community Server

MySQL安装下载地址

找到自己想要的版本下载到本地即可然后拉取到自己的服务器

或者就是使用wget下载

wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.32-1.el7.x86_64.rpm-bundle.tar

1·检查环境

rpm -qa | grep mysql

rpm -qa | grep mariadb

如果上方两条命令存在软件包的执行rpm -e进行删除直接rpm -e 复制下来软件包名称即可

2·服务时间检查

使用date查询时间是否准确,如果不准centos7系统可以使用ntpdate同步时或者重启chronyd服务 systemctl restart chronyd)

安装

创建MySQL工作目录解压安装包

mkdir mysql

tar xvf mysql-5.7.32-1.el7.x86_64.rpm-bundle.tar -C mysql

cd mysql

按照依赖关系依次安装rpm依赖关系依次common libs client server

rpm -ivh mysql-community-common-5.7.32-1.el7.x86_64.rpm

rpm -ivh mysql-community-libs-5.7.32-1.el7.x86_64.rpm

rpm -ivh mysql-community-client-5.7.32-1.el7.x86_64.rpm

rpm -ivh mysql-community-server-5.7.32-1.el7.x86_64.rpm

查看配置文件

cat /etc/my.cnf

默认存储目录datadir=/var/lib/mysql

启动mysql systemctl start mysqld

开机自启动 systemctl enable mysqld

登录数据库 mysql -uroot -p

查看初始密码 cat /var/log/mysqld.log | grep password

进入数据库修改root初始密码:alter user root@localhost identified by 'password';

主从配置
A主库

vim /etc/my.cnf

log-bin           = mysql-bin  #[必须]启用二进制日志

server-id         = 11         #[必须]服务器唯一ID,默认是1,最好取ip的后3位

expire-logs-days  = 7          #只保留7天的二进制日志,以防磁盘被日志占满

重启数据库 systemctl restart mysqld

登录数据库查看log_bin是否成功开启log_binON表示开启成功OFF表示开启失败

show variables like '%log_bin%';

B从库

vim /etc/my.cnf

log-bin           = mysql-bin  #从库可不启用二进制日志

server-id         = 12         #[必须]服务器唯一ID,默认是1,最好取ip的后3位

expire-logs-days  = 7          #只保留7天的二进制日志,以防磁盘被日志占满

重启MySQLsystemctl restart mysqld

C同步操作

登录主库执行

主库创建同步账号

grant replication slave on *.* to 'slave'@'%' identified by 'Peng123..';

replication即可满足同步需求如果不行可以给all权限

查询数据库账号

select user,authentication_string,host from mysql.user;

查看主服务当前的二进制日知名偏移量

show master status\G

从库执行

stop slave;

change master to 

master_host='192.168.142.11',

master_user='slave',

master_password='Peng123..',

master_log_file='mysql-bin.000001',

master_log_pos=439;

master_host 主库主机的IP地址

master_port 主库的端口,默认为3306

master_user 实现复制的远程登录master的mysql的用户

master_password 实现复制的远程登录master的mysql的面

master_log_file 实现复制的binlog日志文件(主库的文件名)

master_log_pos 实现复制的binlog日志文件的偏移量(主库的偏移量)

start slave;

查看状态出现两个yes表明配置完成

show slave status\G

验证主库上创建数据库或者新增数据查看从库是否同步完成

没有出现yes原因

IO线程:可能是防火墙导致故障关闭或者放通3306即可

systemctl stop firewalld

或者

firewall-cmd --permanent --add-port=3306/tcp

firewall-cmd --reload

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值