侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

MYSQL 完全备份、主从复制、级联复制、半同步小结

数据库  /  管理员 发布于 6年前   125

mysql 完全备份

1,启用二进制日志,并于数据库分离,单独存放

 vim /etc/my.cnf

添加

log_bin=/data/bin/mysql-bin

创建/data/bin文件夹并授权

chown mysql.mysql /data/bin

2,完成备份数据库

mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz

3,对数据库进行增删改

 INSERT hellodb.students(stuid,name,gender,age) VALUE(27,'Lujunyi','M',30);

4,停止MySQL

 systemctl stop mariadb.service

5,解压备份文件

unxz /data/all.sql.xz 

6,查找完全备份时二进制日志的位置

vim /data/all.sql   HANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=468

7,导出完成备份后的二进制日志

mysqlbinlog --start-position=468 /data/bin/mysql-bin.000001 > /data/inc.sql

8,还原数据

mysql -e 'source /data/all.sql'mysql -e 'source /data/inc.sql'

9,验证完成。

误删除的恢复

1,启用二进制日志并与数据库分开存放

vim /etc/my.cnf

添加

 log_bin=/data/bin/mysql-bin

创建/data/bin文件夹并授权    

 chown mysql.mysql /data/bin

2,对数据库进行完全备份

mysqldump -A --single-transaction --master-data=2 | xz > /data/all.sql.xz

3,对数据库进行增删改

mysql -e "drop table hellodb.students"  mysql -e "insert hellodb.teachers value (5,'wangqi',50,'M')"

4,停止服务

 systemctl stop mariadb.service

5,删除数据库

rm -rf /var/lib/mysql/*

6,解压备份文件

unxz /data/all.sql.xz

7,查看备份文件,查找二进制节点   

 vim /data/all.sql   -- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=521902;

8,导出二进制日志节点数据

mysqlbinlog --start-position=521902 /data/bin/mysql-bin.000004 >/data/inc.sql

9,删除二进制日志节点数据中误操作的命令
   

 vim /data/inc.sql  DROP TABLE `hellodb`.`students` /* generated by server */

10,启动服务 

systemctl start mariadb.service

11.关闭二进制日志记录

mysql -e "SET sql_log_bin=off"

12,导入备份数据

 mysql </data/all.sql  mysql </data/inc.sql 

13,验证完成。

主从复制

# 主服务器

1,主服务器启用二进制日志,并更改二进制目录

 vim /etc/my.cnf  log_bin=/data/bin/mysql-bin  binlog-format=row  server-id=1(主从服务器必需保证不同)

更改目录见上面

2,重启服务

service mysql restart

3,创建一个账户用来复制数据的账户

mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"

4,查看主服务器正在使用的二进制日志

 show master logs;  +------------------+-----------+  | Log_name   | File_size |  +------------------+-----------+  | mysql-bin.000001 |  14383 |  +------------------+-----------+  1 row in set (0.00 sec)

# 从服务器

5,更配置

 vim /etc/my.cnf  server-id=2  read-only  #log-bin=/data/bin/mysql-bin

6,启动服务

service mysql restart

7,关联主服务

 MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='172.22.7.70', MASTER_USER='repluser',  MASTER_PASSWORD='centos',  MASTER_PORT=3306,  MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=14383;

8,查看从服务器状态

show slave status\G;

9,启动线程

start slave;

#测试

10,增删改主服务器数据,查看从服务器数据是否同步。

主从复制出错的解决-sql_slave_skip_counter

#master服务 ip=172.22.7.70

1,主服务器启用二进制日志,并更改二进制目录

 vim /etc/my.cnf  log_bin=/data/bin/mysql-bin  binlog-format=row  server-id=1(主从服务器必需保证不同)

更改目录见上面

2,重启服务

service mysql restart

3,创建一个账户用来复制数据的账户

mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"

4,查看主服务器正在使用的二进制日志

 mysql -e 'show master logs;'  +------------------+-----------+  | Log_name   | File_size |  +------------------+-----------+  | mysql-bin.000001 |  264 |  | mysql-bin.000002 |  245 |  +------------------+-----------+

#slave服务 ip=172.22.7.71

5,修改配置文件,启动服务

 vim /etc/my.cnf  [mysqld]  server-id = 2  read-only systemctl start mariadb

#配置错误master服务信息

6,配置,change master to

 CHANGE MASTER TO  MASTER_HOST='172.22.7.77',  MASTER_USER='wang',   MASTER_PASSWORD='lodman', MASTER_PORT=3306,  MASTER_LOG_FILE=log-bin.001',  MASTER_LOG_POS=4,  MASTER_CONNECT_RETRY=10;

7,查看slave 状态

 mysql -e 'show slave status\G'  Slave_IO_State:     Master_Host: 172.22.7.77    Master_User: wang    Master_Port: 3306   Connect_Retry: 10   Master_Log_File: log-bin.001  Read_Master_Log_Pos: 4   Relay_Log_File: ct7m1-relay-bin.000001   Relay_Log_Pos: 4 Relay_Master_Log_File: log-bin.001   Slave_IO_Running: No  Slave_SQL_Running: No       ・・・・・・・・・略

8,启动复制线程

mysql -e 'start slave'

9,再次查看slave状态

 mysql -e 'show slave status\G'  Slave_IO_State:     Master_Host: 172.22.7.77    Master_User: wang    Master_Port: 3306   Connect_Retry: 10   Master_Log_File: log-bin.001  Read_Master_Log_Pos: 4   Relay_Log_File: ct7m1-relay-bin.000001   Relay_Log_Pos: 4 Relay_Master_Log_File: log-bin.001   Slave_IO_Running: Connecting  Slave_SQL_Running: Yes       ・・・・・・・・・略

10,master服务增删改数据

11,查看slave服务是否同步,失败!

#解决错误

12,停止并重置slave复制线程服务

 mysql -e 'stop slave' mysql -e 'reset slave'

 13,配置正确的change master to 信息

 CHANGE MASTER TO MASTER_HOST='172.22.7.70', MASTER_USER='repluser', MASTER_PASSWORD='centos', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=245;

14,查看slave状态    

show slave status\G;   Slave_IO_State: Waiting for master to send event    Master_Host: 172.22.7.70    Master_User: repluser    Master_Port: 3306   Connect_Retry: 10   Master_Log_File: mysql-bin.000002  Read_Master_Log_Pos: 7382   Relay_Log_File: ct7m1-relay-bin.000002   Relay_Log_Pos: 540 Relay_Master_Log_File: mysql-bin.000002   Slave_IO_Running: Yes  Slave_SQL_Running: No

15,发现slave状态中Slave_SQL_Running: No ,执行下面命令更为为YES

 MariaDB [(none)]> stop slave;Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;Query OK, 0 rows affected (0.00 sec)MariaDB [(none)]> start slave;Query OK, 0 rows affected (0.03 sec)MariaDB [(none)]> show slave status\G;*************************** 1. row ***************************   Slave_IO_State: Waiting for master to send event    Master_Host: 172.22.7.70    Master_User: repluser    Master_Port: 3306    Connect_Retry: 10   Master_Log_File: mysql-bin.000002  Read_Master_Log_Pos: 7382   Relay_Log_File: ct7m1-relay-bin.000003    Relay_Log_Pos: 540  Relay_Master_Log_File: mysql-bin.000002   Slave_IO_Running: Yes   Slave_SQL_Running: Yes        ・・・・・・・・・略

16,查看slave服务数据是否同步

17,同步完成。

Mysql 级联复制

在生产换进中有一种主从复制的方法主节点先将数据同步到一个中间的从节点,然后由从节点给后续的其他从节点来复制数据,这种复制方式称为级联复制。

级联复制的好处是可以极大的减轻主节点的压力

级联复制在配置时需要在中间节点上启用log_slave_updates的选项。

#环境 服务器 master   slave   slave 系统 centos7   centos7   centos7 ip  172.22.7.70  172.22.7.70  172.22.7.71

#mater

1,主服务器启用二进制日志,并更改二进制目录

 vim /etc/my.cnf  log_bin=/data/bin/mysql-bin  binlog-format=row  server-id=1(主从服务器必需保证不同)

更改目录见上面

2,重启服务

service mysql restart

3,创建一个账户用来复制数据的账户 

mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"

4,查看主服务器正在使用的二进制日志

 mysql -e 'show master logs;'  +------------------+-----------+  | Log_name   | File_size |  +------------------+-----------+  | mysql-bin.000001 |  264 |  | mysql-bin.000002 |  7488 |  | mysql-bin.000003 |  402 |  +------------------+-----------+ #slave

5,修改配置文件,并创建二进制日志目录

 vim /etc/my.cnf  [mysqld]  log-bin=/data/bin/mysql-bin  binlog-format=row  read-only  log_slave_updates  server-id=2

更改目录见上

6,启动服务

 systemctl restart mariadb

7,配置change master to信息

 CHANGE MASTER TO MASTER_HOST='172.22.7.70',MASTER_USER='repluser',MASTER_PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=402;

8,启动slave线程

 mysql -e 'start slave'

9,查看slave状态

 show slave status\G; *************************** 1. row ***************************   Slave_IO_State: Waiting for master to send event    Master_Host: 172.22.7.70    Master_User: repluser    Master_Port: 3306   Connect_Retry: 60   Master_Log_File: mysql-bin.000003  Read_Master_Log_Pos: 7539   Relay_Log_File: ct7m1-relay-bin.000002   Relay_Log_Pos: 7677 Relay_Master_Log_File: mysql-bin.000003   Slave_IO_Running: Yes  Slave_SQL_Running: Yes   Replicate_Do_DB:

10,在master上增删改数据测试查看

#slave1

11,在slave上将slave上的数据拷贝过来

 mysqldump -A --single-transaction -F --master-data=1 > /data/all.sql scp /data/all.sql 172.22.7.72:/data

12,slave创建一个账户用来复制数据的账户

 mysql -e 'GRANT REPLICATION SLAVE ON *.* TO "repluser"@"172.22.7.%" IDENTIFIED BY "centos"

13,修改slave1配置

 vim /etc/my.cnf  [mysqld]  read-only  server-id=3

14,启动服务

 systemctl start mariadb

15,查看slave服务器的二进制日志

 mysql -e 'show master logs'  +------------------+-----------+  | Log_name   | File_size |  +------------------+-----------+  | mysql-bin.000001 |  351 |  | mysql-bin.000002 |  351 |  | mysql-bin.000003 |  351 |  | mysql-bin.000004 |  25552 |  | mysql-bin.000005 |  586 |  +------------------+-----------+

16,打开all.sql文件对change master on信息加以修改
 

 CHANGE MASTER TO MASTER_HOST='172.22.7.71',MASTER_USER='repluser',MASTER  _PASSWORD='centos',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000005',  MASTER_LOG_POS=586;  

17,导入slave数据

mysql < /data/all.sql

18,启动线程

 mysql -e "START SLAVE;"

19,查看slave状态

mysql -e "show slave status\G;"

20,对master对象增删改操作,查看是否同步

21,同步完成。

MySQL半同步

异步复制是当用户写入一条记录时,先将数据写入到主节点,然后回复用户一个写入成功的消息,然后慢慢的将数据复制到其背后的其他从节点,这样的好处是效率比较高,但是缺点也是非常明显,主服务器和从服务器的延迟过大并且主服务器突然发生异常,此时就会造成数据的丢失。

同步复制是当用户写入一条记录时,主节点将数据写入数据库,然后将数据复制给其后面的其他从节点,当所有的从节点返回数据复制成功后,主节点再回复用户数据接入成功的消息,这样做的好处是,确保了数据的安全性,但损失了效率。

半同步复制是间于同步复制和异步复制之间的一种复制方法,他的工作原理是:当用户执行写操作时,主节点会将数据发送给其后面的其他从节点,只要有一个从节点返回复制成功的消息,主节点就直接返回写入成功,如果主节点背后的从节点迟迟不返回复制成功消息,此时就会有一个超时时长,一旦达到超时时长,主节点就先返回消息告诉用户复制成功,而后将数据继续给从节点复制。

#配置主从复制   步骤见上。

#配置半同步

##master

1,修改配置文件启用插件

 vim /etc/my.cnf  [mysqld]  log-bin=/data/bin/mariadb-bin  binlog-format=row  server-id=1  rpl_semi_sync_master_enabled 

2,重启服务,

 systemctl restart mariadb

3,查看插件是否启动 

 SHOW GLOBAL VARIABLES LIKE '%semi%';  +------------------------------------+-------+  | Variable_name      | Value |  +------------------------------------+-------+  | rpl_semi_sync_master_enabled  | ON |  | rpl_semi_sync_master_timeout  | 3000 |  | rpl_semi_sync_master_trace_level | 32 |  | rpl_semi_sync_master_wait_no_slave | ON |  +------------------------------------+-------+  4 rows in set (0.00 sec)

4,设置超时时长

 SET GLOBAL rpl_semi_sync_master_timeout=3000; Query OK, 0 rows affected (0.00 sec)

##slave

5,修改配置文件启用插件

 vim /etc/my.cnf  [mysqld]  log-bin=/data/bin/mariadb-bin  binlog-format=row  server-id=2  rpl_semi_sync_master_enabled

6,重启服务,

systemctl restart mariadb

7,查看插件是否启动 

 SHOW GLOBAL VARIABLES LIKE '%semi%';  +------------------------------------+--------------+  | Variable_name      | Value  |  +------------------------------------+--------------+  | rpl_semi_sync_master_enabled  | ON   |  | rpl_semi_sync_master_timeout  | 1000   |  | rpl_semi_sync_master_trace_level | 32   |  | rpl_semi_sync_master_wait_no_slave | ON   |  | rpl_semi_sync_master_wait_point | AFTER_COMMIT |  +------------------------------------+--------------+  5 rows in set (0.00 sec)

8,启动复制线程

mysql -e "START SLAVE";

9,测试检查

10,同步完成

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    Mysql中的索引精讲
    下一条:
    mysql删除关联表的实操方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 分库分表的目的、优缺点及具体实现方式介绍(0个评论)
    • DevDB - 在 VS 代码中直接访问数据库(0个评论)
    • 在ubuntu系统中实现mysql数据存储目录迁移流程步骤(0个评论)
    • 在mysql中使用存储过程批量新增测试数据流程步骤(0个评论)
    • php+mysql数据库批量根据条件快速更新、连表更新sql实现(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2017-06
    • 2017-08
    • 2017-09
    • 2017-10
    • 2017-11
    • 2018-01
    • 2018-05
    • 2018-10
    • 2018-11
    • 2020-02
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-08
    • 2020-09
    • 2021-02
    • 2021-04
    • 2021-07
    • 2021-08
    • 2021-11
    • 2021-12
    • 2022-02
    • 2022-03
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-07
    • 2023-08
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客