数据库基础之06(搭建主从同步复制结构,主从从同步复制结构,互为主从复制结构,主库和从库的配置选项,部署半同步复制模式)

主从同步概述及实现

1、对指定库的异地同步

同步子前,需要将主库的所有数据完全备份后再在从库上完全恢复数据,先保证主从库数据的一致。

2、mysql主-->从复制架构的实现

主master库(192.168.4.51)配置如下:
(1)、启用binglog日志文件
[mysqld]
server_id=51-----用于指定服务器id号,mysql同步的数据中是包含server-id的,用于标识SQL命令是从哪个server写入的,
log-bin=master51-----定义了日志文件名前缀为master51log
binlog_format="mixed"------binlog日志里会记录SQL命令还会记录产生的相关数据

(2)、用户授权:给从库添加连接时使用的用户名
grant replication slave on *.* to repluser@"192.168.4.52" identified by "123qqq...A";----注意这里对象必须是*.*所有库的所有表

(3)、查看正在使用的binglog日志信息
show master status;
#show processlist;-----查看当前数据库服务器的所有进程

3、从slave库(192.168.4.52)配置如下:

(1)、指定server_id
[mysqld]
server_id=52
systemctl restart mysqld

(2)、测试授权用户:mysql -uroot -p123456----先用本机帐号登陆
show slave status\G;---查询从库状态信息
Empty set (0.00 sec)---将会显示为空

(3)、管理本机登陆指定主库信息
change master to master_host="192.168.4.51",----指定主库的ip地址
master_user="repluser",----填写主库授权时添加的用户
master_password="123qqq...A",----填写被主库授权时设置的密码
master_log_file="master51.000001",-----这里写的是主库的binlog日志名
master_log_pos=750;-----这里的750是通过在主库上show master status;来查到的
start slave;-----加载从库配置,实现成为主库的从库

(4)、查看配置
show slave status\G;---重新查询从库状态信息
Read_Master_Log_Pos: 750
               Relay_Log_File: host52-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master51.000001
             Slave_IO_Running: Yes------slave_IO线程:复制master主机binlog日志文件里的SQL
                                                                    命令到本机的relay-log文件里。
            Slave_SQL_Running: Yes------slave_SQL线程:执行本机relay-log文件里的SQL命令,
                                                                    重现master的数据操作。

(5)、从库配置好后会多出来这几个文件:cd /var/lib/mysql
master.info----记录从库连接主库的配置信息(change master to master_host="192.168.4.51",master_user="repluser",master_password="123qqq...A",
master_log_file="master51.000001",master_log_pos=750;)

relay-log.info-----中继日志信息(slave_IO线程记录了主库配置文件的的最后偏移量,以及由从库中的哪个从日志文件里复制SQL命令到多大偏移量,实际上就是从库中由主库接收来的日志先放在从库的中继日志中,然后把从库中新增的少量SQL命令交给slave_SQL来执行)

host52-relay-bin.*----中继日志文件(记录了自master_log_pos=750之后的所有主机日志)

(6)、当要临时停止主从同步时,可以通过在从库上输入stop slave 命令实现

(7)、当要完全撤销主从同步功能时,先systemctl stop mysqld,再将从库中/var/lib/mysql下的master.info、relay-log.info、host52-relay-bin.*的配置文件删除掉,然后再systemctl restart mysqld重起服务即可。

客户端测试主从同步配置
在主库服务器上管理员本机登陆,添加客户端存储数据时的连接用户。
create database gamedb;
create table gamedb.t1(id int);
grant select,insert on gamedb.* to webadmin@"%" identified by "123qqq...A";

4、如何实现主(A主机192.168.4.51)-->从(B主机192.168.4.52)-->从(C主机192.168.4.53):

(1)、同步子前,需要将主库的所有数据完全备份后再在从库上完全恢复数据,先保证主从库数据的一致。

(2)、主master库(A主机作为B主机的主库)配置如下:

(a)、启用binglog日志文件
[mysqld]
server_id=51-----用于指定服务器id号,mysql同步的数据中是包含server-id的,用于标识SQL命令是从哪个server写入的,
log-bin=master51-----定义了日志文件名前缀为master51log
binlog_format="mixed"

(b)、用户授权:给从库添加连接时使用的用户名
grant replication slave on *.* to repluser@"192.168.4.52" identified by "123qqq...A";

(c)、查看正在使用的binglog日志信息
show master status;
#show processlist;-----查看当前数据库服务器的所有进程

(3)、主master库(B主机作为C主机的主库)配置如下:

(a)、启用binglog日志文件
[mysqld]
log_slave_updates-----开启级联复制功能
server_id=52-----用于指定服务器id号,mysql同步的数据中是包含server-id的,用于标识SQL命令是从哪个server写入的,
log-bin=master52-----定义了日志文件名前缀为master52log
binlog_format="mixed"

(b)、用户授权:给从库添加连接时使用的用户名
grant replication slave on *.* to repluser@"192.168.4.53" identified by "123qqq...A";

(c)、查看正在使用的binglog日志信息
show master status;
#show processlist;-----查看当前数据库服务器的所有进程

(4)、B主机作为A主机的的从库进行相关设置

(1)、指定server_id
[mysqld]
server_id=52
systemctl restart mysqld

(2)、测试授权用户:mysql -uroot -p123456----先用本机帐号登陆
show slave status\G;---查询从库状态信息
Empty set (0.00 sec)---将会显示为空

(3)、管理本机登陆指定主库信息
change master to master_host="192.168.4.51",----指定主库的ip地址
master_user="repluser",----填写主库授权时添加的用户
master_password="123qqq...A",----填写被主库授权时设置的密码
master_log_file="master51.000001",-----这里写的是主库的binlog日志名
master_log_pos=750;-----这里的750是通过在主库上show master status;来查到的
start slave;-----加载从库配置,实现成为主库的从库

(4)、查看配置
show slave status\G;---重新查询从库状态信息
Read_Master_Log_Pos: 750
               Relay_Log_File: host52-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master51.000001
             Slave_IO_Running: Yes------slave_IO线程:复制master主机binlog日志文件里的SQL
                                                                    命令到本机的relay-log文件里。
            Slave_SQL_Running: Yes------slave_SQL线程:执行本机relay-log文件里的SQL命令,
                                                                    重现master的数据操作。

(5)、C主机作为B主机的从库进行相关设置

(1)、指定server_id
[mysqld]
server_id=53
systemctl restart mysqld

(2)、测试授权用户:mysql -uroot -p123456----先用本机帐号登陆
show slave status\G;---查询从库状态信息
Empty set (0.00 sec)---将会显示为空

(3)、管理本机登陆指定主库信息
change master to master_host="192.168.4.52",----指定主库的ip地址
master_user="repluser",----填写主库授权时添加的用户
master_password="123qqq...A",----填写被主库授权时设置的密码
master_log_file="master52.000001",-----这里写的是主库的binlog日志名
master_log_pos=750;-----这里的750是通过在主库上show master status;来查到的
start slave;-----加载从库配置,实现成为主库的从库

(4)、查看配置
show slave status\G;---重新查询从库状态信息
Read_Master_Log_Pos: 750
               Relay_Log_File: host52-relay-bin.000002
                Relay_Log_Pos: 319
        Relay_Master_Log_File: master51.000001
             Slave_IO_Running: Yes------slave_IO线程:复制master主机binlog日志文件里的SQL
                                                                    命令到本机的relay-log文件里。
            Slave_SQL_Running: Yes------slave_SQL线程:执行本机relay-log文件里的SQL命令,
                                                                    重现master的数据操作。

5、这里顺便提及一些主库和从库的配置选项

5-1、主库配置选项:

binlog_do_db=库名-----设置master对哪些库记日志
binlog_ignore_db=库名----设置master对哪些库不记日志

5-2、从库配置选项:

log_slave_updates----记录从库更新,允许级联复制(A-B-C)
relay_log=xxxx-relay-bin---指定中继日志文件名(即自己可以定义改名)
replication_do_db=库名-----仅复制指定库,其它库将被忽略,此选项可以设置多条(省略时复制所有库)
replication_ignore_db=库名-----不复制哪些库,其他库将被忽略,ignore-db和do-db只能选用其中一种。

6、复制模式分类及描述

异步复制(asynchronous replication):主库执行完一次事物后,立即将结果返还给客户端,并不关心从库是否已经接收并处理。

全同步复制(full synchronous replication):当主库执行完一次事物,且所有从库都执行了该事物后才返回给客户端。

半同步复制(semisynchronous replication):介于异步复制与全同步复制之间,主库在执行完一次事物后,等待至少一个从库接收并写到relay-log中才返回给客户端。

6-1、临时部署半同步复制模式

(1)、主库上的操作:
show variables like "have_dynamic_loading";---查看是否允许动态加载模块(默认允许)

select plugin_name,plugin_status from information_schema.plugins where plugin_name like "%semi%";----查看是否已经安装了半同步模块

install plugin rpl_semi_sync_master soname "semisync_master.so";----安装支持主库半同步的模块

select plugin_name,plugin_status from information_schema.plugins where plugin_name like "%semi%";----再次查看是否已经安装了半同步模块

show variables like "rpl_semi_sync_%_enabled";----查看是否已经启用半同步复制(默认没有开启)

set global rpl_semi_sync_master_enabled=1;----启用主库半同步复制功能

show variables like "rpl_semi_sync_%_enabled";-----再次查看是否已经启用半同步复制

(2)、从库上的操作:

show variables like "have_dynamic_loading";

select plugin_name,plugin_status from information_schema.plugins where plugin_name like "%semi%";

install plugin rpl_semi_sync_slave soname "semisync_slave.so";----安装支持从库半同步的模块

select plugin_name,plugin_status from information_schema.plugins where plugin_name like "%semi%";
+----------------------+---------------+
| plugin_name          | plugin_status |
+----------------------+---------------+
| rpl_semi_sync_master | ACTIVE        |
| rpl_semi_sync_slave  | ACTIVE        |
+----------------------+---------------+

show variables like "rpl_semi_sync_%_enabled";

set global rpl_semi_sync_slave_enabled=1;----启用从库半同步复制功能

show variables like "rpl_semi_sync_%_enabled";


+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_enabled | ON    |
| rpl_semi_sync_slave_enabled  | ON    |
+------------------------------+-------+

6-2、永久部署主从同步模式

systemctl stop mysqld

vim /etc/my.cnf
[mysqld]
server_id=56
log-bin=master56
binlog_format="mixed"
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------启用从库半同步复制功能

systemctl restart mysqld

感谢您的拜读!!!

猜你喜欢

转载自blog.csdn.net/Perfect11_1/article/details/81138299
今日推荐