首页 数据库 mysql教程 详解centos7下mysql5.6的主从复制的示例代码分享

详解centos7下mysql5.6的主从复制的示例代码分享

Mar 29, 2017 pm 01:41 PM

本篇文章主要介绍了centos7下mysql5.6的主从复制详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

一、mysql主从复制介绍

mysql的主从复制并不是数据库磁盘上的文件直接拷贝,而是通过逻辑的binlog日志复制到要同步的服务器本地,然后由本地的线程读取日志里面的sql语句,重新应用到mysql数据库中。

mysql数据库支持单向,双向,链式级联,环状等不同业务场景的复制,一台服务器充当主服务器master,接收来自用户的更新,而一个或多个其他服务器充当从服务器slave,接收来自主服务器binlog文件的日志内容,解析出sql,更新到从服务器。

一主一从 (A -> B, A为主,B为从)

一主多从 (A -> B, A -> C, A为主,B与C为从)

双主双向同步 (A -> B , B -> A , A与B同为主,互相备份)

线性级联 (A -> B -> C , A与B主主互备,C为从)

环状级联 (A -> B -> C -> A, A、B、C都为主,各节点都可写入数据)

二、实现mysql主从读写分离的方案

1、通过程序实现读写分离(判断语句关键字,去连接主从数据库)

2、通过开源的软件实现读写分离(mysql-proxy,amoeba,稳定性和功能一般,不建议生产使用)

3、独立开发DAL层软件

三、mysql主从复制原理介绍

mysql主从复制是一个异步的复制过程,将一个主库复制到一个从库,master与slave之间实现整个过程是由三个线程参与完成。其中sql线程与I/O线程在slave端,另一个I/O线程在master端。

复制原理过程

1、在slave上执行start slave命令,开启主从复制开关,开始进行主从复制。

2、slave的I/O线程通过master上已经授权的复制用户请求master,请求指定binlog日志的指定位置。

3、master接收slave的I/O线程的请求后,其自身负责复制的I/O线程会根据slave的请求信息分批读取指定binlog日志的指定位置之后的日志信息,然后返回给slave的I/O线程,返回信息除了binlog日志外,还有master的新binlog文件名称,以及新binlog中的下一个指定更新位置。

4、slave获取来自master上I/O线程发送的binlog日志内容,日志文件及位置点后,会将binlog内容依次写到slave自身的relay log(中继日志)文件尾部,并将新的binlog文件名和位置记录到master-info文件中,以便下次从master读取新binlog日志时,能告诉master从新binlog的新位置读取。

5、slave的sql线程会实时检测本地relay log中I/O线程新增加的日志内容,及时把relay log文件中的内容解析成sql语句,并按解析sql语句的位置顺序执行这些sql语句。relay-log.info中记录当前应用中继日志的文件名及位置点。

四、mysql主从复制操作

我这里是mysql单机多实例,3306、3308、3309

主库为3306,从库为3308,3309

(1)、在master主库上

1、设置server-id值并开启binlog功能

> vi /etc/my.cnf
登录后复制
 [mysqld]
 #用于同步的每台机器server-id都不能相同

server-id = 10

log-bin = /data/mysql56/data/mysql-bin
登录后复制

2、重启主库

> service mysqld restart
登录后复制

3、登陆主库,查看server-id

> mysql -uroot -p

> show variables like 'server_id';
登录后复制

4、主库上建立用于从库复制的账号

> grant replication slave on *.* to "rep"@"%" identified by "123456";

> flush privileges;

> select user,host from mysql.user;

> show grants for rep@"%";
登录后复制

5、对主库数据库锁表只读(当前窗口不要关掉)

> flush table with read lock;
登录后复制

查看主库状态

> show master status;
登录后复制

6、备份主库所有数据文件

> mysqldump -uroot -p -A -B | gzip > /data/mysql_bak.$(date +%F).sql.gz
登录后复制

7、备份完主库数据后,解锁

> unlock tables;
登录后复制

8、把主库导出的数据迁移到从库

(2)、在slave从库上

1、设置server-id值并关闭binlog功能

①有两种情况下需打开binlog

②级联同步A->B->C中间的B,就要开启binlog

③在从库做数据库备份,必须要有全备和binlog日志才是完整备份。

> vi /mysql-instance/3308/my.cnf 

[mysqld]

server-id = 11

relay-log = /mysql-instance/3308/relay-bin

relay-log-info-file = /mysql-instance/3308/relay-log.info
登录后复制

2、重启从库

> /mysql-instance/3308/mysql restart
登录后复制

3、登陆从库检查参数

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock

> show variables like 'log_bin';

> show variables like 'server_id';
登录后复制

4、把主库mysqldump导出的数据恢复到从库

> gzip -d /data/mysql_bak.2017-01-15.sql.gz
登录后复制

把主库数据还原到从库

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock < /data/mysql_bak.2017-01-15.sql
登录后复制

5、登录从库,配置复制参数

CHANGE MASTER TO

MASTER_HOST=&#39;127.0.0.1&#39;,

MASTER_PORT=3306,

MASTER_USER=&#39;rep&#39;,

MASTER_PASSWORD=&#39;123456&#39;,

MASTER_LOG_FILE=&#39;mysql-bin.000001&#39;,

MASTER_LOG_POS=396;
登录后复制

注意上面的MASTER_LOG_FILE和MASTER_LOG_POS是在主库中用show master status;查看的信息。

查看master.info文件

> cat /mysql-instance/3308/data/master.info
登录后复制

6、启动从库同步开关,测试主从复制情况

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "start slave;"

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "show slave status\G;"

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "show slave status\G" | egrep "IO_Running|SQL_Running|_Behind_Master"
登录后复制

7、测试主从复制

> mysql -uroot -p -e "create database wohehe;"

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "show databases;"
登录后复制

五、mysql主从复制线程状态说明及用途

1、主库线程的同步状态

> show processlist\G; 


*************************** 1. row ***************************

   Id: 5

  User: rep

  Host: localhost:47605

   db: NULL

Command: Binlog Dump

  Time: 4728

 State: Master has sent all binlog to slave; waiting for binlog to be updated

  Info: NULL
登录后复制

说明主库线程已从binlog读取更新,发送到了从库,线程处理空闲状态,等待binlog的事件更新。

2、从库线程的同频状态

> show processlist\G; 

*************************** 2. row ***************************

   Id: 6

  User: system user

  Host:

   db: NULL

Command: Connect

  Time: 5305

 State: Slave has read all relay log; waiting for the slave I/O thread to update it

  Info: NULL
登录后复制

说明从库已读取所有中继日志,等待从库I/O线程的更新。

六、主从复制故障

如果我在从库上创建了一个库,然后去主库创建同名的库,那么这就会冲突了。

> show slave status; 

Slave_IO_Running: Yes

Slave_SQL_Running: No

Seconds_Behind_Master: NULL

Last_Error: Error &#39;Can&#39;t create database &#39;xxxxx&#39;; database exists&#39; on query. Default database: &#39;xxxxx&#39;. Query: &#39;create database xxxxx&#39;
登录后复制

对于该冲突解决方法

方法一

> stop slave;

#将同步指针移动下一个,如果多次不同步,可重复操作

> set global sql_slave_skip_counter = 1;

> start slave;
登录后复制

方法二

> vi /mysql-instance/3308/my.cnf 

#把可以忽略的错误号事先在配置文件中配置

slave-skip-errors = 1002,1007,1032
登录后复制

以上是详解centos7下mysql5.6的主从复制的示例代码分享的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
1 个月前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

CentOS7各个版本镜像下载地址及版本说明(包括Everything版) CentOS7各个版本镜像下载地址及版本说明(包括Everything版) Feb 29, 2024 am 09:20 AM

载CentOS-7.0-1406的时候,有很多可选则的版本,对于普通用户来说,不知道选择哪个好,下面做一下简单介绍:(1)CentOS-xxxx-LiveCD.ios和CentOS-xxxx-bin-DVD.iso有什么区别?前者只有700M,后者有3.8G。其差别不仅仅在大小上,其更本质的差别是,CentOS-xxxx-LiveCD.ios只能加载到内存里运行,不能安装。CentOS-xxx-bin-DVD1.iso才可以安装到硬盘上。(2)CentOS-xxx-bin-DVD1.iso,Ce

CentOS 7 紧急修复模式的进入步骤 CentOS 7 紧急修复模式的进入步骤 Jan 13, 2024 am 09:36 AM

打开centos7页面出现:welcometoemergencymode!afterloggingin,type“journalctl-xb”toviewsystemlogs,“systemctlreboot”toreboot,“systemctldefault”totryagaintobootintodefaultmode。giverootpasswordformaintenance(??Control-D???):解决方法:执行r

如何在CentOS 7中访问并清理/tmp目录中的垃圾文件? 如何在CentOS 7中访问并清理/tmp目录中的垃圾文件? Dec 27, 2023 pm 09:10 PM

centos7系统中tmp目录下有很多垃圾,想要清除垃圾,该怎么清除呢?下面我们就来看看详细的教程。查看tmp文件目录下文件列表,执行命令cdtmp/切换到tmp当前文件目录,执行ll命令,查看当前目录下文件列表。如下图所示。使用rm删除文件命令,需要注意的是rm命令是将文件永远从系统中删除,因此建议在使用rm命令时,最好是在删除文件前给出提示。使用命令rm-i文件名,等用户确认删除(y)或跳过删除(n),系统进行相应的操作。如下图所示。

centos7如何设置密码规则?centos7设置密码规则的方法 centos7如何设置密码规则?centos7设置密码规则的方法 Jan 07, 2024 pm 01:17 PM

出于安全考虑设置密码规则设置密码到期的天数。用户必须在天内更改密码。此设置仅影响创建用户,而不会影响现有用户。如果设置为现有用户,请运行命令“chage-M(days)(user)”。PASS_MAX_DAYS60#密码到期时间PASS_MIN_DAYS3#初始密码更改时间PASS_MIN_LEN8#密码最小长度PASS_WARN_AGE7#密码过期提示时间重复密码限制使用[root@linuxprobe~]#vi/etc/pam.d/system-auth#nearline15:

CENTOS7下如何安装mbstring扩展? CENTOS7下如何安装mbstring扩展? Jan 06, 2024 pm 09:59 PM

1.UncaughtError:Calltoundefinedfunctionmb_strlen();出现如上错误时,说明我们没装上mbstring扩展;2.进入PHP安装目录cd/temp001/php-7.1.0/ext/mbstring3.启动phpize(/usr/local/bin/phpize或/usr/local/php7-abel001/bin/phpize)命令来安装php扩展4../configure--with-php-config=/usr/local/php7-abel

CentOS7怎么安装Mysql并设置开机自启动 CentOS7怎么安装Mysql并设置开机自启动 Jun 02, 2023 pm 08:36 PM

centos7不带mysql数据库了,默认的数据库是mariadb(mysql的一个分支)。可以按照以下步骤手动安装mysql数据库。1.下载rpm安装文件wgethttp://repo.mysql.com/mysql-community-release-el7.rpm2.执行rpm安装rpm-ivhmysql-community-release-el7.rpm依赖解析完成后,出现下列选项:dependenciesresolved=================================

centos7下解压文件命令(zip)详解 centos7下解压文件命令(zip)详解 Jan 07, 2024 pm 06:30 PM

1.压缩文件夹为zip文件[root@cgls]#zip-rmydata.zipmydata2.把mydata.zip解压到mydatabak目录里面[root@cgls]#unzipmydata.zip-dmydatabak3.mydata01文件夹和mydata02.txt压缩成为mydata.zip[root@cgls]#zipmydata.zipmydata01mydata02.txt4.直接解压mydata.zip文件[root@cgls]#unzipmydata.zip5.查看myd

如何修改和设置CentOS7的默认快捷键? 如何修改和设置CentOS7的默认快捷键? Jan 09, 2024 pm 06:14 PM

当默认快捷键与使用的软件按键冲突或需要按照自己的习惯使用快捷键,这时候只好修改和设置默认快捷键,该怎么修改CentOS7默认的快捷键额?下面我们就来看看详细的教程。1、开启虚拟机中的Centos7系统,进入桌面2、单击左上角的应用程序->系统工具->设置3、进入到设置界面,单击设备4、选择Keyboard,单击右边任意一项,并在键盘上按下要设置的快捷键,即可更改其快捷键,(注意有些是无法更改的!)5、更改后如下所示,最后点击设置,这样快捷键的设置修改就完成了。

See all articles