数据库-主从同步

一、应用

1.数据库读写分离,均衡数据库负载(主写从读)

2.作为一种备份机制;当主服务器出现问题时,可以切换到从服务器

二、原理

图片名称

1.主服务器master记录数据库操作日志到Binary log,

2.从服务器开启i/o线程将二进制日志记录的操作同步到relay log(存在从服务器的缓存中),

3.另外sql线程将relay log日志记录的操作在从服务器执行。

主从同步复制方式:

1.同步复制,master的变化,必须等待slave-1,slave-2,...,slave-n完成后才能返回。

2.异步复制,master只需要完成自己的数据库操作即可,至于slaves是否收到二进制日志,是否完成操作,不用关心。MYSQL的默认设置。

3.半同步复制,master只保证slaves中的一个操作成功,就返回,其他slave不管。这个功能,是由google为MYSQL引入的。

本文说的是在centos 7系统上,实现的mysql5.7数据库的主从同步配置,从而实现读写分离操作。

三、主服务器操作

准备:两台服务器都装好了mysql;或者一台服务器,两个不同端口的数据库

eg:以公司服务器124和150测试,新建数据库gx_test

master主数据库的配置

1.修改主服务器配置my.cnf

# 修改数据库配置
vim /etc/my.cnf
# server-id 服务器唯一标识。
server-id=1
# log_bin 启动MySQL二进制日志,即数据同步语句,从数据库会一条一条的执行这些语句。
log_bin=master-bin
# 自动设置log_bin_index文件为你指定的文件名后跟.index
log_bin_index=master-bin.index
# binlog_do_db 指定记录二进制日志的数据库,即需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可。
# binlog_ignore_db 指定不记录二进制日志的数据库,即不需要复制的数据库名,如果有多个数据库,重复设置这个选项即可
# 其中需要注意的是,binlog_do_db和binlog_ignore_db为互斥选项,一般只需要一个即可。
binlog_do_db=test

2.进入master服务器数据库

# 连接数据库
mysql -uroot -p
# 192.168.17.%通配符,表示0-255的IP都可访问主服务器,正式环境请配置指定从服务器IP
# 若将 192.168.17.% 改为 %,则任何ip均可作为其从数据库来访问主服务器
grant replication slave on *.* to masterbackup@'192.168.220.%' identified by '123456';

3.重启master服务器数据库

service mysql restart

4.查看主服务器数据库状态

show master status;

得到master-bin.000001,154(动态调整)

image


四、从服务器操作

slave从数据库的配置

1.修改从服务器配置my.cnf

vim /etc/my.cnf
# replicate-do-db=test
# server-id 服务器唯一标识,如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,
# 如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
server-id=2


# relay-log启动MySQL二进制日志,用来做数据备份和崩溃恢复,或主服务器挂掉,将此从服务器作为其他从服务器的主服务器
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index


# replicate-do-db 指定同步的数据库,如果复制多个数据库,重复设置这个选项即可。
# 若在master端不指定binlog-do-db,则在slave端可用replication-do-db来过滤。
# replicate-ignore-db 不需要同步的数据库,如果有多个数据库,重复设置这个选项即可。
# 其中需要注意的是,replicate-do-db和replicate-ignore-db为互斥选项,一般只需要一个即可

2.重启从服务器数据库

systemctl restart mariadb

3.连接master主服务器

mysql -uroot -p


#master_host对应主服务器的IP地址。
#master_port对应主服务器的端口。
#master_log_file对应show master status显示的File列:master-bin.000001。
#master_log_pos对应show master status显示的Position列:154。
change master to master_host='192.168.220.124',master_port=3306,master_user='masterbackup',master_password='123456',master_log_file='master-bin.000001',master_log_pos=245;
图片名称

4.启动slave数据同步

# 启动slave数据同步
mysql> start slave;
# 停止slave数据同步(若有需要)
mysql> stop slave;

五、检查主从同步

1.查看slave信息

mysql> show slave status;

Slave_IO_Running和Slave_SQL_Running都为yes,则表示同步成功。

2.主服务器新建表及添加数据

从数据库是否对应新增表及数据

posted @ 2021-09-12 11:52  难删亦删  阅读(455)  评论(0)    收藏  举报