AI智能
改变未来

MySql—主从复制


一  什么是主从复制

将主数据库中的DDL和DML操作通过二进制日志传输到从数据库上,然后将这些日志重新执行(重做);从而使得从数据库的数据与主数据库保持一致。

 

基本原理:

  MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。

  MySQL复制是基于主服务器在二进制日志中跟踪所有对数据库的更改。因此,要进行复制,必须在主服务器上启用二进制日志。每个从服务器从主服务器接收主服务器已经记录到日志的数据。

  当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,并在本机上执行相同的更新。然后封锁并等待主服务器通知新的更新。从服务器执行备份不会干扰主服务器,在备份过程中主服务器可以继续处理更新。

二  主从复制的作用

  1、主数据库出现问题,可以切换到从数据库。

  2、可以进行数据库层面的读写分离。

  3、可以在从数据库上进行日常备份。

 三  复制过程

如数据库版本为5.7,安装以后文件对应目录:

mysql的数据文件和二进制文件:/var/lib/mysql/

mysql的配置文件:/etc/my.cnf

mysql的日志文件:/var/log/mysql.log

139为master

1、创建一个用户repl,并且允许其他服务器可以通过该用户远程访问master,通过该用户去读取二进制数据,实现同步。

     Create user repl identified by \’repl\’;

    repl用户必须具有replication slave权限,除此之外其他权限都不需要。

    grant replication slave on *.* to \’repl\’@\’%\’ identified by \’repl\’;

 2、修改140 my.cnf配置文件,在[mysqld]下添加配置

       log-bin=mysql-bin //启用二进制文件

       server-id=130       //服务器唯一ID

3、重启数据库

     systemctl restart mysqld

4、登录到数据库

      show master status —-查看master状态信息

140为slave

  1、修改140 my.cnf配置文件,在[mysqld]下增加如下配置

       server-id=132     ———服务器id,唯一

       relay-log=slave-relay-bin

       relay-log-index=slave-relay-bin.index

       relad_only=1

2、重启数据库

      systemctl restart mysqld

3、连接到数据库客户端,通过如下命令建立同步连接

      change master to master_host=\’192.168.0.139\’,master_port=3306,master_user=\’repl\’,master_password=\’repl\’,master_log_file-\’mysql-bin.000001\’,master_log_pos=0(master_log_file,master_log_pos可以从master的show master status找到对应的值,不能随便写);

4、执行start slave

5、show slave status \\G; 查看slave服务器状态,当如下两个线程为yes,表示主从复制配置成功

Slave_IO_RUNNING=YES

Slave_SQ_RUNNING=YES

主从同步原理

1、master记录二进制日志。在每个事务更新数据完成之前,master在日志记录这些改变。MySql将事务串行的写入二级制日志,即使事务中的语句都是交叉执行的。在事件写入二进制日志完成后,master通知存储引擎提交事务。

2、slave将master的binary log拷贝到它自己的中继日志。首先,slave开始一个工作线程—I/O线程,I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。

3、SQL线程从中继日志读取事件,并重放其中的事件而更新slave数据,使其与master中的数据一致。

 

 

 

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » MySql—主从复制