mysql主从同步
从数据库服务器自动同步主库上的数据到本机,实现数据的自动备份
主数据库服务器:接收客户端访问的数据库服务器
从数据库服务器:自动同步主数据库服务器上的数据到本机
部署mysql主从同步:
主从同步原理
Master ,记录数据更改操作
启用 binlog 日志
设置 binlog 日志格式
设置 server_id
Slave 运行 2 个线程
Slave_IO :复制 master 主机 binlog 日志文件里的 SQL 到本机的 relay-log 文件里。
Slave_SQL :执行本机 relay-log 文件里的 SQL 语句,重现 Master 的数据操作。
主数据库的配置步骤:
1.启用binlog日志
2.用户授权
3.查看日志信息
从数据库的配置步骤:
1.制定server_id
2.指定主库信息
3.启动slave程序
4.查看slave程序运行状态
教学环境:
主数据库:192.168.4.51
从数据库:192.168.4.52
###################################################################################################
#构建主从同步
基本构建思路
1.确保数据相同
从库必须要有主库上的数据
把主库中的数据备份到从库中 #确保2个数据库中数据相同
]# mysqldump -uroot -p123qqq...A -A > db5.sql #主库上备份
]# scp db5.sql 192.168.4.52:/root/
]# mysql -uroot -p123qqq...A < db5.sql #从库上恢复主库的备份
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2.配置主服务器
启用binlog日志及设置格式,设置server_id,授权用户
1>启用binlog日志及设置格式,设置server_id
]# vim /etc/my.cnf
[mysqld]
server_id=51
log-bin=db51
binlog_format="mixed"
]# systemctl restart mysqld
]# ls /var/lib/mysql/db51*
/var/lib/mysql/db51.000001 /var/lib/mysql/db51.index
2>授权用户
mysql> grant replication slave on *.* to repluser@"192.168.4.%" identified by "123qqq...A";
mysql> select user,host from mysql.user;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3.配置从服务器
设置server_id,指定主数据库服务器信息
1>设置server_id
]# vim /etc/my.cnf
[mysqld]
server_id=dba52
]# systemctl restart mysqld
2>指定主数据库服务器信息
mysql> show slave status; #查看slave运行状态
mysql> show master status; #查看主库的日志信息
+-------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------+----------+--------------+------------------+-------------------+
| db51.000001 | 451 | | | |
+-------------+----------+--------------+------------------+-------------------+
mysql> change master to master_host="192.168.4.51", #主库地址
-> master_user="repluser", #主库授权用户
-> master_password="123qqq...A", #授权用户密码
-> master_log_file="db51.000001", #主库日志文件名
-> master_log_pos=451; #主库日志Position(偏移位置)
3>启动slave程序
mysql> start slave;
4>查看slave程序运行状态 确认 IO 线程、 SQL 线程都已运行
mysql> show slave status\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: 451
Relay_Log_File: dba3-relay-bin.000002
Relay_Log_Pos: 315
Relay_Master_Log_File: db51.000001
Slave_IO_Running: Yes #IO线程已运行
Slave_SQL_Running: Yes #SQL线程已运行
... ...
Last_IO_Error: #记录IO报错信息
Last_SQL_Errno: 0
Last_SQL_Error: #记录SQL报错信息
... ...
相关文件
文件名 说明
master.info 连接主服务器信息
relay-log.info 中继日志信息
主机名 -relay-bin.xxxxxx 中继日志
主机名 -relay-bin.index 中继日志索引文件
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
4.测试配置
客户端连接主库,写入的数据,再连接从库的时候也能访问到
1>在主库服务器上添加一个客户端连接用户访问主库
mysql> grant select,insert on db5.* to yaya@"%" identified by "123qqq...A";
2>在主机50上连接主数据库服务器51上查询或存储数据
[root@dba1 ~]# mysql -uyaya -p123qqq...A -h192.168.4.51
mysql> insert into db5.a values(110);
......
mysql> select * from db5.a; #从库上查询,发现访问主库插入的数据,从库上也能够查到
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5.临时关闭同步
stop slave;
6.永久关闭同步,把从库还原成独立的服务器 #删除从库相关文件
rm -rf /var/lib/mysql/{master.info,relay-log.info,主机名-relay-bin.*}
systemctl restart mysqld
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
常用配置选项
主库配置选项
适用于 Master 服务器
选 项 用 途
binlog_do_db=name 设置 Master 对哪些库记日志
binlog_ignore_db=name 设置 Master 对哪些库不记日志
从库配置选项
适用于 Slave 服务器
选 项 用 途
log_slave_updates 记录从库更新,允许链式复制( A-B-C )
relay_log=dbsvr2-relay-bin 指定中继日志文件名
replicate_do_db=mysql 仅复制指定库,其他库将被忽略,此选项可设置多条(省略时复制所有库)
replicate_ignore_db=test 不复制哪些库,其他库将被忽略, ignore-db 与 do-db 只需选用其中一种
################################################################################################################
MySQL 主从同步模式
结构模式
主从同步结构模式介绍
基本应用
– 单向复制(主从):主 --> 从
扩展应用
– 链式复制(主从从):主 --> 从 --> 从 #不单独用,一般和第三方软件配置高可用
– 双向复制(主主):主 <--> 从 #不单独用,一般和第三方软件配置高可用
– 放射式复制(一组多从):从 <-- 主 --> 从
|
从
配置主从从结构
主库:host51:
1>启用binlog日志及设置格式,设置server_id
]# vim /etc/my.cnf
[mysqld]
server_id=51
log-bin=db51
binlog_format="mixed"
]# systemctl restart mysqld
]# ls /var/lib/mysql/db51*
/var/lib/mysql/db51.000001 /var/lib/mysql/db51.index
2>授权用户
mysql> grant replication slave on *.* to repluser@"192.168.4.%" identified by "123qqq...A";
mysql> select user,host from mysql.user;
[root@dba2 mysql]# mysqldump -uroot -p123qqq...A -A > /zhu.sql
[root@dba2 mysql]# scp -r /zhu.sql 192.168.4.52:/root/
[root@dba2 mysql]# scp -r /zhu.sql 192.168.4.53:/root/
从库1:host52:
[root@dba3 ~]# mysql -uroot -p123qqq...A < zhu.sql
[root@dba3 ~]# vim /etc/my.cnf
[mysqld]
server_id=52
log-bin=db52
binlog_format="mixed"
log_slave_updates #中间从库必须有这一条
[root@dba3 ~]# systemctl restart mysqld
[root@dba3 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.168.4.51",
-> master_user="repluser",
-> master_password="123qqq...A",
-> master_log_file="db51.000001",
-> master_log_pos=2080;
mysql> start slave;
mysql> show slave status\G;
... ...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
... ...
mysql> grant replication slave on *.* to repluser@"192.168.4.%" identified by "123qqq...A";
从库2:host53:
[root@dba4 ~]# mysql -uroot -p123qqq...A < zhu.sql
[root@dba4 ~]# vim /etc/my.cnf
[mysqld]
server_id=dba52
[root@dba4 ~]# systemctl restart mysqld
[root@dba4 ~]# mysql -uroot -p123qqq...A
mysql> change master to master_host="192.168.4.52",
-> master_user="repluser",
-> master_password="123qqq...A",
-> master_log_file="db51.000001",
-> master_log_pos=2080;
mysql> start slave;
mysql> show slave status\G;
... ...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
... ...
##################################################################################################################
mysql主从同步复制模式
复制模式介绍
异步复制( Asynchronous replication )
– 主库在执行完客户端提交的事务后会立即将结果返给客户端,并不关心从库是否已经接收并处理。
全同步复制( Fully synchronous replication ) 百度:mysql组同步设置 生产环境一般不会用的,都用的半同步模式
– 当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。
半同步复制( Semisynchronous replication )
– 介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到 relay log 中才返回给客户端。
配置半同步配置
查看是否允许动态加载模块
– 默认允许
mysql> show variables like "have _ dynamic _ loading";
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| have_dynamic_loading | YES |
+----------------------+-------+
命令行加载插件
– 用户需有 SUPER 权限
查看:
mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like ‘%semi%‘;
主库:
mysql> install plugin rpl_semi_sync_master soname ‘semisync_master.so‘;
从库:
mysql> install plugin rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;
启用半同步复制
– 在安装完插件后,半同步复制默认是关闭的
主:
mysql> set global rpl_semi_sync_master_enabled = 1;
从:
mysql> set global rpl_semi_sync_slave_enabled = 1;
查看:
mysql> show variables like "rpl_semi_sync_ %_enabled";
配置文件永久启用半同步复制
– 命令配置临时配置,重启服务会失效
– 修改后需要重启服务
– 写在主配置文件 /etc/my.cnf 的 [mysqld] 下方
主:
plugin-load=rpl_semi_sync_master=semisync_master.so
rpl_semi_sync_master_enabled=1
从:
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=1
在有的高可用架构下, master 和 slave 需同时启动
– 以便在切换后能继续使用半同步复制
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
原文:https://www.cnblogs.com/heping0312/p/14052316.html