mysql主从同步

主从同步原理
master,记录数据更改操作
启动binlog 日志
设置binlog 日志格式
设置server_id
中继日志 (relay-log)
slave 运行两个线程
slave_io : 复制master主机 binlog 日志文件里的sql 到本机的relay-log 文件
slave_sql :执行本机relay-log 文件里的 sql 语句 ,重现master的数据操作

一主一从 (单项复制时,建议将从库设为只读)
构建主从同步
思路
确保数据相同
从库必须要有主库上的数据
配置主服务器
启动binlog 日志 授权用户 查看当前正在使用的日志
配置从服务器
设置server_id 指定主库信息
测试配置
客户端连接主库写入数据 在从库上也能查询到

确保数据一致
master 服务器
应包括希望同步的所有库
对采用myisam 的库,可离线备份
mysqldump -uroot -p密码 -B 库名列表 > mytest.sql (完全备份数据)

确保数据一致
slave 服务器
离线导入由master 提供的备份
清空同名库 (若有的)
scp dbsvr1:/root/mytest.sql ./ 直接scp 远程拷贝
mysql -uroot -p < mytest.sql (验证口令)

配置主服务器
调整运行参数
启动binlog及允许同步
在主库配置
vim /etc/my.cnf
[mysqld]
server_id=51 启动服务器idhao
log-bin=master51 启动binlog日志
binlog_format=mixed 指定日志格式

grant replication slave on . to repluser@"%" identified by “654321”; (给从库授权)
show master status; (查看binlog)
±----------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±----------------±---------±-------------±-----------------±------------------+
| master51.000001 | 983 | | | |
±----------------±---------±-------------±-----------------±------------------+

show slave status;(查看是否为从服务器)
在从库操作
vim /etc/mycnf
server_id=52 (加这一条 注,与主库id不能一样)

change master to master_host=“192.168.4.51” ,
master_user=“repluser”, (用户要一致) 主库授权用户名
master_password=“654321”, 授权用户密码
master_log_file=“master51.000001”, 日志文件
master-log_pos= 983(偏移量); 偏移位置
(注,host 为主库ip 密码为主库654321 log 的值和pos 值 要查看主库 『show master status』)

start slave; (q启动主程序)
show slave status\G
Slave_IO_Running: Yes (如果io connecting) IO线程以运行
Slave_SQL_Running: Yes SQL线程已运行
排错方式
stop slave
hange master to master_user=repluser (选项=“值”) ------这是用户错了(改) 『哪项错改哪』
start slave

验证 (在主库创库,创表)
从库查看
主库授权 访问用户: grant select ,update, insert on db6.* to webuser@"%" identified by “654321” (授权用户 webuser 用所有host主机 登入 。在库db6下有 select update insert 权限)
用别的主机登入测试
mysql -h192.168.4.51 -uwebuser -p654321

rm -rf /var/lib/mysql/master.info relay-log.info rm -rf relay-bin.*
(删除文件恢复到独立数据库)
systemctl restart mysqld

主从同步常用配置选项
适用master(主库)
vim /etc/my.cnf
binlog_do_db=库名 设置master 对那些库同步(记日志) (注如果不能限制同步需要 注释 #binlog_format=mixed)
binlog_ignore_db=库名 设置master 不对那些库同步(不记日志)
适用 slave (从库)
vim /etc/my.cnf
log_slave_updates ####记录从库更新,允许链式复制
relay_log=中继日志文件名 ####指定中继日志文件名
replicate_do_db=mysql ####仅复制指定库,可指定多条(省略则复制所有)
replicate_ignore_db=test ####不复制哪些库,其他库将被忽略

mysql主从同步结构
一主一从 ***********
一主多从 ***********
主从从 (给主做从,给从(中间即做从也做主)在设置给从)
主主结构 (互为主从)

配置主从从结构
配置主库 (1.用户授权 2.启用binlog日志 3.重启服务)

  1. grant replication slave on . to 用户名@“从库ip地址” identified by “密码”;
  2. log_bin=日志名
    server_id=id号
    binlog_format=“mixed”
    3.systemctl restart mysqld
    配置第一台从库 (也做主库)
    修改配置文件
    server_id=id
    log_bin=master…
    binlog_fromat=‘mixed’
    log_slave_updates ####记录从库更新,允许链式复制
    用户授权
    grant replication slave on . to 用户名@“第二台从库ip” identified by “密码”
    指定主库信息
    change master to master_host=“主库ip” ,master_user=“用户名”,master_password=“密码”,master_log_file=“日志文件”,master_log_pos=偏移量;
    启动slave 从库进程
    start slave
    show slave status\G; (查看状态)

配置第二台从库
修改配置文件
server_id=id
指定主库信息
change master to master_host=“第一台从库ip” ,master_user=“用户名”,master_password=“密码”,master_log_file=“日志文件”,master_log_pos=偏移量;
启动slave 从库进程
start slave
show slave status\G; (查看状态)

mysql主从复制模式
异步复制
主库执行完一次事务后,立即将结果返回给客户端,并不关心从库是否已经接受并处理
全同步复制
当主库执行完一次事务,且所有从库都执行了该事务后才返回给客户端
半同步复制
介于异步复制何全同步复制之间
主库在执行完一次事务后,等待至少一个从库接受到并写入到relay log 中才返回给客户端

模式配置
查看是否允许动态加载模块
show variables like “have_dynamic_loading”; (如果是NO ,则只能写到配置文件)
±---------------------±------+
| Variable_name | Value |
±---------------------±------+
| have_dynamic_loading | YES |
±---------------------±------+
命令行加载插件
用户需要super 权限
install plugin rpl_semi_sync_master soname ‘semisync_master.so’; (在主库上执行)
install plugin rpl_semi_sync_slave soname ‘semisync_slave.so’; (在从库执行)
select plugin_name,plugin_status from information_schema.plugins where plugin_name like ‘%semi%’ (查看)

启动半同步复制
vim /etc/my.cnf
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 (从库)
show variables like ‘rpl_semi_sync_%_enabled’; (查看状态)
±-----------------------------±------+
| Variable_name | Value |
±-----------------------------±------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_slave_enabled | ON |
±-----------------------------±------+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值