当前位置: 首页 > news >正文

mysql服务器主备份_MySQL 基于主主备份

在两个服务器上都要开启二进制日志和中继日志

如果两个服务器的数据库id启动自动增长功能,要在配置文件中设置一个的id为奇数,另外一个的id为偶数,或者一个的id为偶数,另外一个的id为奇数,因为如果不这样设置,有可能两个服务器上同时都有用户在写的时候会产生相同的id号造成冲突,所以一般情况下不建议数据库的id号启用自动增长功能,或者用id生成器进行生成。

一、环境说明:

192.168,47.179 (ip)----mariadb01(主机名)-------server01(连接用户)------server01(密码)

192.168,47.178 (ip)----mariadb02(主机名)-------server02(连接用户)------server02(密码)

二、搭建步骤

2.1 创建数据的连接用户

Mariadb01上面创建连接用户server01,并且只能通过192.168.47.178进行连接;

脚本:mariadb[none]> GRANT REPLICATION SLAVE ON*.* TO'server01'@'192.168.47.178' IDENTIFIED BY 'server01';

Mariadb02上面创建连接用户server02,并且只能通过192.168.47.149进行连接;

脚本:mariadb[none]> GRANT REPLICATION SLAVE ON*.* TO'server02'@'192.168.47.179'IDENTIFIED BY 'server02';

mariadb[none]> select user,password,host from mysql.user;  ---查看一下是否有授权的用户用于主从复制

2.2 修改mysql的参数文件

修改Mariadb01的参数文件,在MySQL的主配置文件默认为/etc/my.cnf,修改/添加如下内容

[mysql]

skip_name_resolve = on

innodb_file_per_table = on

max_connections = 20000

log_bin = bin-log  ---开启二级制日志

relay_log = relay-log  ---开启中继日志

server_id = 1

auto_increment_offset = 1  ---表示id号从1开始

auto_increment_increment = 2 ---表示以2为步进,即为奇数

修改之后,重启msyql生效:servicemysqld restart

修改Mariadb02的参数文件,在MySQL的主配置文件默认为/etc/my.cnf,修改/添加如下内容

[mysql]

skip_name_resolve = on

innodb_file_per_table = on

max_connections = 20000

server_id = 2

relay_log = relay-log

log_bin = bin-log

auto_increment_offset = 2

auto_increment_increment = 2

参数说明:

a、server_id数据库的进行数据同步的时候用于标识该语句最初是从哪个server写入的,在进行主主或主从的搭建中,都需要填写;

b、auto_increment_increment:在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。为避免两台主数据库生成的编码重复了,所以需要设置该值

2.3复制其中的一台服务器的数据库到另外一台服务器

因为环境是全新搭建的,所以两个的环境都是一样的,并需要进行数据的初始化工作;

需要的话可以通过以下步骤进行操作,以Mariadb01为源数据库进行同步,如下操作:

2.3.1.锁定Mariadb01数据库,查看状态

mariadb[none]> FLUSH TABLES WITH READ LOCK;

Query OK, 0 rows affected(0.00 sec)

mariadb[none]> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+

| File | Position |Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000008 | 107| | |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

显示源数据库处于8号binlog的107位置;

2.3.2.备份数据库

[root@Mariadb01~]# mysqldump--all-databases --lock-tables --flush-logs> /tmp/retail.sql

[root@Mariadb01~]#scp /tmp/retail.sql192.168.47.178:/tmp/

2.3.3.在mysql02暂停二进制日志, 进行导入操作;

mariadb[none]< set @@session.sql_log_bin=0;

[root@Mariadb02 ~]# < /tmp/retail.sql#导入retail数据库

mariadb[none]< set @@session.sql_log_bin=1;

mariadb[none]> FLUSH TABLES WITH READ LOCK;

2.4.锁定mysql02数据库并查看状态

mysql> SHOW MASTERSTATUS;

+------------------+----------+--------------+------------------+

| File | Position |Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000009 | 107| | |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

显示备份文件位于9号binlog的107位置;

2.5进行主主的通信连接;

a、在Mariadb01上面进行用户和binlog的确认

mysql> CHANGE MASTERTOMASTER_HOST='192.168.47.178',MASTER_USER='server02',MASTER_PASSWORD='server02',MASTER_LOG_FILE='mysql-bin.000008',MASTER_LOG_POS=107;

mysql>start slave;

mysql> showslave status\G

b、在Mariadb02上面进行用户和binlog的确认

mysql> CHANGE MASTERTOMASTER_HOST='192.168.47.179',MASTER_USER='server01',MASTER_PASSWORD='server01',MASTER_LOG_FILE='mysql-bin.000009',MASTER_LOG_POS=107;

mysql>start slave;

mysql> showslave status\G

主要这两项:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

分别解锁Mariadb01、Mariadb02数据库

mariadb[none]> UNLOCK TABLES;

测试

在mysql01写入在mysql02上有显示

在mysql02写入在mysql01上有显示

复制时应该注意的问题:

1、从服务设定为“只读”:在从服务器启动read_only,但仅对非SUPER权限的用户有效;

要想阻止所有用户可以申请一个全局读锁:mysql>FLUSH TABLES WITH READ LOCK;

2、尽量确保复制时的事务安全

在master节点启用参数:sync_binlog=ON,表示只要当前节点有事物提交时就立即从内存缓冲区保存到二进制日志中,避免从服务器复制时二进制日志中没有这个提交操作主服务器就坏了,这样从服务器就不知道这个事物该不该提交了

如果用到的是InnoDB存储引擎:

innodb_flush_logs_at_trx_commit=ON  ---每当事物提交时就同步到事物日志中

innodb_support_xa=ON    让innodb支持分布式事物

3、从服务器意外中止时尽量避免自动启动复制线程,假如从服务器在复制一个事件的时候复制到一半的时候从服务器意外终止了,如果重新启动,复制功能实是会自动开启的,因为在/var/lib/mysql/master.info文件中记录了连接到主服务器的信息,所以启动mariadb服务时会自动启动复制线程,这样就会造成问题,因为终止前的事物复制到一半,不知道该不该提交,为了避免这种事情发生,我们要把网断掉,查看一下是否有复制到一半的事物,如果有手动删除,然后手动加changemaster to 指向意外终止时主服务器二进制日志的位置,或者重新备份恢复后启动复制功能

4、从节点:设置参数

sync_master_info=ON

sync_relay_log_info=ON

相关文章:

  • win2012卸载mysql_Sql Server 2012完全卸载方法 只需8步轻松卸载
  • mysql多表查询实训_MySql-多表查询练习
  • mysql 如何解锁_Mysql如何解锁?
  • mysql left a 10_MySQL语法基础
  • demonstration记忆_英语背诵方法之一:意群断句法
  • mysql8分区_mysql8中的表分区
  • ztree 后台异步加载_Ztree 分批异步加载
  • linux执行mysql表_linux shell命令执行sql(mysql入门)
  • python 数组逆序重放_OpenJudge计算概论-找最大数序列
  • python爬虫处理滑块验证_python爬虫基础(9:验证识别之滑块验证)
  • qmediaplayer进度_QMediaPlayer的duration问题
  • java timer定时执行一次_Java Timer(定时调用、实现固定时间执行)
  • java字串数组_java字符串数组
  • java swing 拖拽文件夹_Java Swing 鼠标拖放文件 代码1
  • java treemap 降序排序_Java TreeMap 升序|降序排列
  • “大数据应用场景”之隔壁老王(连载四)
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Mocha测试初探
  • Rancher如何对接Ceph-RBD块存储
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • spring + angular 实现导出excel
  • Swift 中的尾递归和蹦床
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vim 折腾记
  • yii2中session跨域名的问题
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 前端学习笔记之观察者模式
  • 使用SAX解析XML
  • 使用Swoole加速Laravel(正式环境中)
  • 小程序开发之路(一)
  • 延迟脚本的方式
  • 用jQuery怎么做到前后端分离
  • 优化 Vue 项目编译文件大小
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • 阿里云ACE认证学习知识点梳理
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • "无招胜有招"nbsp;史上最全的互…
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (4)STL算法之比较
  • (52)只出现一次的数字III
  • (十)DDRC架构组成、效率Efficiency及功能实现
  • (五)Python 垃圾回收机制
  • (转) ns2/nam与nam实现相关的文件
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转)母版页和相对路径
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET MVC第五章、模型绑定获取表单数据
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证