mysql 主从的复制的原理及操作步骤

数据库读法约定:

主库: master

从库: slave

mysql 主从同步的原理:

#主从是异步模式,且是由从库找主库进行同步;

1、主库开启IO线程;    开启binlog;

#binlog记录用户的增删改

从库开启IO线程;    开启SQL线程;

2、主库授权从库同步的帐号密码;

3、备份主库数据且导入从库;

4、在从库change master to 导入用于同步主库的ip、port、user、等信息。

CHANGE MASTER TO  
        MASTER_HOST=‘10.0.0.%‘, 
        MASTER_PORT=3306,

MASTER_USER=‘rep‘, 
        MASTER_PASSWORD=‘123456‘, 
        MASTER_LOG_FILE=‘mysql-bin.000018‘,
        MASTER_LOG_POS=330;

5、start slave 开启从库;

6、从库的IO线程向主库的IO线程发起请求;

主库的IO线程验证请求从库的账户、密码等信息是否合法;

主库返回从库请求的数据(file 、pos);

7、从库IO接受到主库的log日志后,将log写入中继日志relay-log;

从库SQL线程读取relay.log转换后写入从库;

#如果是级联,从库需记录logbin

从库master.info记录从库跟新的位置点;

8、从库IO线程继续向主库请求上一次位置点往下的binlog数据.....



mysql主从同步的步骤:

1)、准备两台数据库环境,或者单台多实例环境,可以正常启动和登录。

2)、配置my.cnf文件。主库配置log-bin和server-id 参数,从库配置server-id,id不可以和主库及其它从库一样,从库一般不开启log-bin功能,注意重启生效,(从库在备份、级联时开启binlog);

vi /etc/my.cnf

49 log-bin=mysql-bin

46 server-id = 1

#以上两个参数要放在my.cnf中的[mysqld]模块下,否则会出错;

查看:egrep -E "server-id|log-bin" /etc/my.cnf
               server-id = 1

log-bin=mysql-bin

生效查看:

А、ll ../mysql/data/下是否有mysql-bin.000005日志生成;

Β、mysql -uroot-p123456 -e "show variables like ‘log_bin‘;"

观察:| log_bin       | ON | 是否为ON

#如果从库是中继需开启binlog、开启log_slave_updates则可以写入。

  3)、登录主库增加用于从库连接主库同步的帐号,例如:rep授权replicattion  slave的权限;

grant resplication slave on *.* to"rep"@"10.0.0.%" identified by "123456";

刷新权限:

flush privileges;

##replication slave为mysql同步的必须权限,此处不要授权all;

##*.*表示所有库所有表,可以指定具体的库和表进行复制

##"rep"@"10.0.0.%" rep为同步帐号。10.0.0.%为授权的网段,使用%表示整个10.0.0.0网段以rep用户访问;

4)、主库登录,整库锁表;然后查看binlog的位置状态;

flush table with read lock;

#窗口关闭后及失效,超时参数到了也失效)

mysql> show masterstatus;

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB |Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000022 |      107 |              |                  |

+------------------+----------+--------------+------------------+

注意:flush tables with read lock  5.1

Flush table with readlock   5.5

mysql-bin.000022=file      107=pos

5)、新开窗口,linux命令行备份或导出原有数据库的数据,并拷贝到从库所在的服务目录;

mysqldump -uroot -p123456 -B -A--master-data=1 --events --single-transaction >/back/my.back

#备份,如果数据量很大,允许停机,可以停机打包,而不用mysqldump;

6)、解锁主库,unlock tables;

或者--master-data=1

7)、把主库导出的原有数据恢复到从库。

8)、根据主库的show master status;查看binlog的位置状态,在从库执行changemaster  to 语句;

CHANGE MASTER TO  
        MASTER_HOST=‘10.0.0.8‘,

#主库的ip地址;
        MASTER_PORT=3306,

#主库mysql的端口;
        MASTER_USER=‘rep‘,

#主库允许从库备份的帐号
        MASTER_PASSWORD=‘123456‘,

#允许帐号的密码, 
        MASTER_LOG_FILE=‘mysql-bin.000018‘,

#mysql-bin的位置;
        MASTER_LOG_POS=330;

CHANGE MASTER TO  
MASTER_HOST=‘10.0.0.%‘, 
MASTER_PORT=3306,
MASTER_USER=‘rep‘, 
MASTER_PASSWORD=‘123456‘, 
MASTER_LOG_FILE=‘mysql-bin.000018‘,
MASTER_LOG_POS=330;

9)、从库开启同步开关:

start slave;

10)、从库检查同步状态,并在主库进行跟新操作;

Show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

为正常

线程的启动与关闭:

停止MYSQL同步

STOP SLAVE IO_THREAD;    #停止IO进程

STOP SLAVE SQL_THREAD;   #停止SQL进程

STOP SLAVE;              #停止IO和SQL进程

启动MYSQL同步

START SLAVE IO_THREAD;    #启动IO进程

START SLAVE SQL_THREAD;   #启动SQL进程

START SLAVE;              #启动IO和SQL进程

RESET SLAVE;             #重置MYSQL同步

#用于让从服务器忘记其在主服务器的二进制日志中的复制位置, 它会删除master.info和relay-log.info文件,以及所有的中继日志,并启动一个新的中继日志,当你不需要主从的时候可以在从上执行这个操作。不然以后还会同步,可能会覆盖掉你的数据库,我以前就遇到过这样傻叉的事情。哈哈!

时间: 2024-08-01 19:03:47

mysql 主从的复制的原理及操作步骤的相关文章

MySQL主从延迟复制实践及生产故障案例恢复实践

1.1 MySQL主从延迟复制介绍 从MySQL5.6开始支持了主从延迟复制,这个功能主要解决的问题是,当主库有逻辑的数据删除或错误更新后,所有的从库都会进行错误的更新,从而导致所有的数据库数据异常,即使有定时的备份数据可以用于数据恢复,特别是数据库数据量很大时,恢复时间会很长,再恢复期间数据库数据被删或错误数据影响正常的访问体验. 而延迟复制就可以较好的解决这个问题.例如,可以设定某一个从库和主库的更新延迟1小时,这样主库数据出问题以后,1个小时以内发现,可以对这个从库进行无害恢复处理,使之依

Mysql的AB复制(主从复制)原理及实现

Mysql复制(replication)是一个异步的复制,从一个Mysql 实例(Master)复制到另一个Mysql 实例(Slave).实现整个主从复制,需要由Master服务器上的IO进程,和Slave服务器上的Sql进程和IO进程共从完成.         要实现主从复制,首先必须打开Master端的binary log(bin-log)功能,因为整个MySQL 复制过程实际上就是Slave从Master端获取相应的二进制日志,然后再在自己slave端完全顺序的执行日志中所记录的各种操作

mysql主从服务器复制原理

在实际企业应用环境当中,单台mysql数据库是不足以满足日后业务需求的.譬如服务器发生故障,没有备份服务器来提供服务的话,业务就得停止.介于这种情况,我们来学习一下mysql主从复制. 将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服

MYSQL主从不同步延迟原理分析及解决方案(摘自http://www.jb51.net/article/41545.htm)

1. MySQL数据库主从同步延迟原理.要说延时原理,得从mysql的数据库主从复制原理说起,mysql的主从复制都是单线程的操作,主 库对所有DDL和DML产生binlog,binlog是顺序写,所以效率很高,slave的Slave_IO_Running线程到主库取日志,效率很 比较高,下一步,问题来了,slave的Slave_SQL_Running线程将主库的DDL和DML操作在slave实施.DML和DDL的IO操作 是随即的,不是顺序的,成本高很多,还可能可slave上的其他查询产生lo

Mysql主从同步-概念和原理介绍

Mysql复制概念Mysql内建的复制功能是构建大型高性能应用程序的基础, 将Mysql数据分布到多个系统上,这种分布机制是通过将Mysql某一台主机数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收从那时起

mysql主从数据库复制

Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的.复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器.主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环.这些日志可以记录发送到从服务器的更新.当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置.从服务器接收从那时起发生的

MySQL主从延时复制

MySQL的主从复制是实现MySQL大规模集群的基础,其在日常生产环境中被广泛的被应用,而在MySQL5.6开始对MySQL的底层代码不断的重构完善后在MySQL的主从复制取得极大的进步,且在5.7版本引入主从多线程复制(http://blog.51cto.com/jim123/1961241),而在5.6版本开始MySQL的主从复制就支持slave上延时复制master而不需要借助第三方工具实现,主从复制延时可以在master误删除数据后在slave中延时一定时间后快速找回误删除数据,至于设置

MySql 新建用户与数据库的实际操作步骤

以下的文章主要讲述的是MySql 新建用户的创建.新建数据库的实际操作步骤以及用户如何进行授权和删除用户的实际操作方案.还有对修改密码的实际操作,以下就是正文的主要内容的创建. 1.MySql 新建用户. 登录MYSQL @>mysql -u root -p @>密码 创建用户 mysql> mysql> insert into mysql.user(Host,User,Password,ssl_cipher,x509_issuer,x509_sub ject) values(&q

mysql主从服务器复制操作

master主机ip:192.168.1.19  用户名sunzy 密码123456slave主机ip:192.168.1.20 1.配置master1)接下来对master进行配置,包括打开二进制日志,指定唯一的servr ID.例如,在配置文件加入如下值:    [mysql]    log-bin=mysql-bin   #二进制变更日值,[必须]启用二进制日志    server-id=1    #为主服务master的ID值2)重启master服务,运行SHOW MASTER STAT