数据库应用_主从同步

1.mysql主从同步原理及实例; 2.主从同步类型;3.主从同步的复制模式

一,mysql主从同步

1.概念:实现数据自动同步的服务结构

1.1主服务器接受客户端访问

1.2从服务器自动同步主服务器的数据

1.3 原理:

master:启用binlog日志.

slave:启用线程I/Othread,将主机master上binlog里的sql命令复制到本机的relay-log文件里.

   启用线程SQLthread,读入本机relay-log的sql语句,实现与主机master同步数据.

2.实例:192.168.4.50做客户端.192.168.4.51搭建主服务器.192.168.4.52和192.168.4.53搭建从服务器.

思路:配置主库4.51->配置并定义从库4.52->配置并定义从库4.53->测试主从同步

拓扑图:

2.1 配置主库4.51

#vim /etc/my.cnf

[mysqld]

log-bin=db51  //启动日志

server_id=51   //指定服务器id

:wq     //保存退出

#systemctl restart mysqld

# ls /var/lib/mysql/db51.*   //查看binlog日志及索引

mysql> grant replication slave on *.* to repluser@"%" identified by "123qqq...A";    //授权给用户repluser

mysql> show master status;    //查看日志信息

2.2 配置从库4.52

2.2.1 为了确保主库与从库的数据保持一致,在指定从库信息之前,需要备份主库4.51上的数据,恢复到从库4.52.

备份主库4.51的数据

]# mysqldump -uroot -p123qqq...A --master-data db2 > /db2.sql     //备份主库4.51

]# scp /db2.sql root@192.168.4.52:/root/       //上传备份到从库4.52

在从库4.52上指定服务器id,并恢复数据,以确保与主库同步.

 #vim /etc/my.cnf

 [mysqld]

 server_id=52   //指定服务器id

 :wq 

#systemctl restart mysqld

mysql> create database db2;   //创建一个新的空库

]# mysql -uroot -pliusingbon52 db2 < /root/db2.sql  //恢复数据到已建空库db2

2.2.2 在主机4.52上定义从库信息:

mysql>show slave status;    //显示当前从库的信息,没有定义之前,内容为空

mysql> change master to

->master_host="192.168.4.51",     //指定主库IP

->master_user="repluser",           //指定授权用户

->master_password="123qqq...A",   //指定授权用户的密码

-> master_log_file="db51.000001",   //vim db2.sql查询得到主库的日志文件

->master_log_pos=441;          //vim db2.sql查询得到主库的日志偏移量

mysql>start slave;       //启动slave进程

mysql> show slave status \G;     //查看slave状态信息,\G竖向显示内容

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

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.4.51

                  Master_User: repluser

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: db51.000001

          Read_Master_Log_Pos: 441

               Relay_Log_File: db52-relay-bin.000002

                Relay_Log_Pos: 315

        Relay_Master_Log_File: db51.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

]# ls /var/lib/mysql  查看生成的相关文件:

Master.info,relay-log.info,db52-relay-bin.* 下图所示:

2.2.3 在主机4.53上定义从库信息,除个别参数不一致,其它与从库4.52一样,这里不再重复.

2.2.4 测试数据库的主从同步

方法1: 在主库4.51上做插入,修改,删除等操作,并在4.52上核实是否同步.

: mysql> create db4;   //创建库db4.

     mysql> create table db4.t1(id char(10),name char(10));   //创建表结构t1

     mysql> insert into db4.t1 values(1,"jim");    //为表格t1插入数据

     mysql> select * from db4.t1;   //查询数据

   验证在主机4.52查看db4的相关信息.

方法2: 从客户端4.50上访问主服务器4.51并写入数据,查看从服务器4.52是否同步.

         1.主机4.51的管理员在本机为客户端做访问授权.

            mysql> grant select,insert on *.* to yaya99@"%" identified by "123qqq...A";

         2.从客户端主机4.50访问数据库主服务器4.51

              #mysql -h192.168.4.51 -uyaya99 -p123qqq...A

        2.1 登录后查询:

            

        2.2 在表格中插入一条信息4,ajiao,shopping,shenzheng

            mysql> insert into db2.前任信息表 values(4,"ajiao","shopping","shenzheng");

          

       2.3 分别在主库4.51,从库4.52和4.53上查看插入的信息是否写入.

二,主从同步类型

mysql同步的结构类型

基本应用: 一主一从

扩展应用: 一主多从

                链式复制   主 <-- 从 -<-- 

                互为主从   主 <--> 

三,复制模式(主从同步)

复制模式产生的背景:为了加快服务器的响应速度,提升客户访问体验.

模式类型异步复制模式(默认); 全同步复制模式半同步复制模式.

异步复制主库执行完一次任务后,立即响应客户端,不关心从库是否同步成功.

全同步复制,也叫组同步复制:主库执行完一次任务,并成功同步到其它所有从库,才响应客户端.

半同步复制:介于异步复制和全同步复制之间,主库在执行完一次任务后,等待至少一个从库收到数据并写入relay log日志里,才响应客户端.

:

在主机192.168.4.54上配置半同步复制模式,

1.查看数据库服务是否允许动态加载模块(默认允许)

mysql> show variables like "have_dynamic-loading"; 

2.命令行加载插件

2.1 查看模块状态

mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';  //查询为空,没有内容,因为还没有加载插件

2.2 命令行加载插件

mysql> install plugin rpl_semi_sync_master SONAME "semisync_master.so"; 

//主模块

mysql> install plugin rpl_semi_sync_slave SONAME "semisync_slave.so";

2.3 再次查看模块状态,呈现active示意加载插件成功.

mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';   //模块已经加载,并为active状态

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

| plugin_name          | plugin_status |

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

| rpl_semi_sync_master | ACTIVE        |

| rpl_semi_sync_slave  | ACTIVE        |

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

3.临时启用半同步复制

3.1查看变量模式状态,呈现OFF示意模式没有启用.

mysql> show variables like "rpl_semi_sync_%_enabled"; //这里的%代表masterslave两种模式.

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

| Variable_name                | Value |

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

| rpl_semi_sync_master_enabled | OFF   |

| rpl_semi_sync_slave_enabled  | OFF   |

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

2 rows in set (0.01 sec)

3.2 临时启用

mysql> set global rpl_semi_sync_master_enabled=1; //激活主服务器复制模式

mysql> set global rpl_semi_sync_slave_enabled=1;  //激活从服务器复制模式

3.3 再次查看模式状态,呈现为ON示意启用成功.

mysql> show variables like "rpl_semi_sync_%_enabled";

4.永久启用半同步复制

#vim /etc/my.cnf

[mysqld]

[mysqld]

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"   //如果一台主机同时有主从模式,则将主从的启用命令写在一起.

rpl_semi_sync_master_enabled=1   //激活主服务器复制模式

rpl_semi_sync_slave_enabled=1   //激活从服务器复制模式

5. 管理员登录mysql查看模块和模式的启用状态,呈现activeon示意启用成功.

结束.

 

posted @ 2019-06-17 20:15  巴州夜雨  阅读(322)  评论(0编辑  收藏  举报