mysql slave修改_MySQL的主从同步

1. 什么是MySQL主从复制

MySQL复制:

     MySQL内建的复制功能是构建大型,高性能应用程序的基础。将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将mysql的某一台主机的数据复制到其它主机(slave)上,并重新执行一遍来实现。

复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循坏,这些日志可以记录发送到从服务器的更新。当一个从服务器

连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知的更新。

需注意的是:

    在进行mysql复制时,所有对复制中的表的更新必须在主服务器上进行。否则必须要小心,以避免用户对主服器上的表进行更新与对从服务器上的表所进行更新之间的冲突。

 (1)mysql复制解决的问题

     a.数据分布(data distribution)

     b.负载平衡(load balancing)

     c.数据备份(backup),保证数据安全

     d.高可用性与容错行(high availability and failover)

     e.实现读写分离,缓解数据库压力

   (2)mysql主从复制原理

        master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,

   如果发生改变,则开始一个I/O Thread请求master二进制事件,同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志

  中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/O Thread和SQL Thread将进入睡眠状态,等待下一次被唤醒。

  注意几点:    

 1--master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。      2--slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和 master数据保持一致了。      3--Mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。      4--Mysql复制最好确保master和slave服务器上的Mysql版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)      5--master和slave两节点间时间需同步

Mysql复制的流程图如下:

16ab7971681e66aaaf315b7cd78dac5f.png

如上图所示:     Mysql复制过程的第一部分就是master记录二进制日志。在每个事务更新数据完成之前,master在二日志记录这些改变。MySQL将事务串行的写入二进制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。    第二部分就是slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。    SQL slave thread(SQL从线程)处理该过程的最后一步。SQL线程从中继日志读取事件,并重放其中的事件而更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。   此外,在master中也有一个工作线程:和其它MySQL的连接一样,slave在master中打开一个连接也会使得master开始一个线程。复制过程有一个很重要的限制——复制在slave上是串行化的,也就是说master上的并行更新操作不能在slave上并行操作。

2. 搭建环境

(1)实验机器:

master(hostname:master   ip:192.168.253.187   OS:centos 7.4)

slave  (hostname:sla ve    ip:192.168.253.214   OS:centos 7.4)

(2)安装包下载解压

https://mirror.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.31-1.el7.x86_64.rpm-bundle.tar    可以在windos中下载好然后传到Linux中,也可以直接使用wget  download。

解压:

0fddb35c2f72afdc5837290e2c6e80d2.png

(3)检查机器有没有自带MySQL和mariadb

15d8fa72bfa7d5b72e140b33ab83a171.png

如果有则需要使用rpm -e +包名卸载,如果使用rpm -e 卸载不了mariadb,可以使用yum -y remove +包名卸载,上图显示我已经安装mysql。

(4)安装MySQL

rpm -ivh mysql-community-server-5.7.31-1.el7.x86_64.rpm --force --nodeps

rpm -ivh mysql-community-client-5.7.31-1.el7.x86_64.rpm --force --nodeps

caea22c903ed48598b0d207a56eacb21.png

安装成功!

(5)修改MySQL配置文件/etc/my.cnf并修改root密码

在配置文件中加入skip-grant-tables,可以在第一次连接数据库时跳过密码验证。

a08bd8f58a3198b4d169fb7774fc5c62.png

开启mysql服务:

systemctl  start  mysqld.service: 

5c56bcaa4c39419b9d3a84398ae3523a.png

连接数据库:

mysql -uroot -p

4b36e47cd3cdde5ecbeea41fbf97d26a.png

执行’flush privileges;’ 刷新权限:

f28aae686c46d7e763fd3177372a6e64.png

修改root密码为123456(这个密码设置为自己需要的):

ab957340befb1e0d27b28b1dbf79a702.png

输入exit退出MySQL,停止MySQL后将skip-grant-tables从/etc/my.cnf注释掉:

c6f411a86f6d64850bc771947925938d.png

重新打开数据库服务,并用新密码连接:

d9364413b28e6c3a81302cb8f31f32e6.png    master和slave都安装好MySQL后,可以配置主从同步

3. 配置主从同步

在master和slave数据库中创建一个数据库:

create database Arm_China;

show databases;

6907a83f7741841d27668884482d61db.png

修改配置文件:

(1) master server:

f0f683166a7af913190279d527ab64bc.png

给从服务器登录主服务器的授权:

grant replication slave,replication client on *.* to 'root'@'192.168.253.214' identified by 'Qw123456@#';

注意:MySQL5.7对密码复杂度有要求,不能使用简单密码设置授权:

544ea020906dfd01fd7d162e0fdb0263.png

(2) 配置从服务器

修改从服务器(slave)配置文件:

 db6b5626a77433c50e43e9c9467632ed.png(3) 重启主服务器MySQL

systemctl  restart  mysqld.service

查看master状态:

show  master  status;

bcc88faf25bc9e14dea7925247b5a847.png

(4) 继续配置从服务器

先重启从服务器的MySQL,然后配置:

change master to master_host='192.168.253.187',master_user='root',master_password='Qw123456@#',master_port=3306,master_log_file='master-a-bin.000003',master_log_pos=154;

bb7051082072a6c60a3f6d139273fd27.png

注意:master_password为授权登录的密码,master_log_file为上图中show master status里的File值,master_log_pos的值为上图中Position的值。

(5) 开启从服务器并查看

start slave;

53bf5f8f2e2271364b6493af2ca84d93.png

查看:show slave status \G;

Slave_IO_Running :YES

Slave_SQL_Running:YES

ddc22e741e1cfd521689b023f9e8a631.png

如果不是YES,可能是grant配置权限的时候没配置好,需要重新配置并flush privileges;

(6) 测试

在主从MySQL中查看创建的数据库,可以看到没有表存在:

69ecdf1fc2b0201fd6b141a329350634.png

在主数据库中写入一张表,然后到从库中查看:

创建表:

create table test( id INT, title VARCHAR(100) NOT NULL, date DATE, author VARCHAR(40) NOT NULL);

718bbb75fab5104db3deae875c1e6c05.png

从库查看:

847c0aff40289a3cb0effb2da7fb6ff4.png

OK,主从同步配置完成。

4. 配置高可用

         下一篇继续搞MySQL的高可用配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL主从延迟问题是数据库运维中经常遇到的问题之一,通常会引起应用程序性能下降或者数据不一致的问题。下面我们来介绍一下如何排查MySQL主从延迟问题。 1. 确认主从复制的状态 首先需要确认主从复制的状态。可以通过以下命令查看: ``` SHOW SLAVE STATUS \G; ``` 在输出结果中,需要关注以下几个参数: - Slave_IO_Running:表示Slave I/O线程是否正在运行,如果为YES,则正常运行,否则需要检查错误日志; - Slave_SQL_Running:表示Slave SQL线程是否正在运行,如果为YES,则正常运行,否则需要检查错误日志; - Seconds_Behind_Master:表示从库落后主库的时间,如果为0,则表示主从同步正常。 2. 确认网络延迟 如果主从复制状态正常,但是Seconds_Behind_Master不为0,那么需要确认网络延迟是否存在。可以通过在主库和从库上分别执行以下命令进行测试: 在主库执行: ``` SELECT NOW(); ``` 在从库执行: ``` SELECT NOW(); ``` 比较两个输出结果的时间差,即可得到主从复制的网络延迟时间。如果网络延迟较大,可以考虑优化网络连接或者将主从库部署在同一地域内。 3. 检查主从库配置 如果网络延迟不存在,那么需要检查主从库的配置是否正确。可以比较主从库的以下参数是否一致: - server_id:表示服务器的ID,主从库必须不同; - log_bin:表示二进制日志文件名称,主库必须开启二进制日志; - binlog_format:表示二进制日志格式,主库必须开启ROW格式; - replicate_do_db:表示从库需要复制的数据库,如果设置了该参数,则只复制该数据库; - replicate_ignore_db:表示从库忽略复制的数据库,如果设置了该参数,则不复制该数据库。 4. 检查主从库版本 如果主从库配置正确,但是主从延迟问题依然存在,那么需要检查主从库的版本是否一致。主从库的版本必须一致,否则会出现主从延迟的问题。 5. 总结 通过以上步骤,可以排查MySQL主从延迟问题。在实际运维过程中,还可以通过监控工具对主从库的状态进行实时监控,及时发现主从延迟问题,并进行处理。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值