Mysql双主部署

解释:

所谓双主备份,其实也就是互做主从复制,每台master既是master,又是另一台服务器的slave。这样,任何一方所做的变更,都会通过复制应用到另外一方的数据库中。

要求:部署Mysql双主复制,部署期间生产服务器可正常访问,但无法进行登录/注册/退出等涉及到对Mysql写的操作。

环境:

系统:centos 6.7

mysql版本:5.6.28

生产环境共2台mysql服务器(以下对两台mysql分别简称为A B)

A:192.168.1.1   (master)

B:192.168.1.2      (slave)

部署前的准备

分别检查A、B两台Mysql服务器是否作为其他master的slave,并停止复制,以免受到影响。

#show slave status\G;

#mysql>stop slave;

  • master(A库) --->  slave(B库)

开始部署

1. 同步数据:以A库的数据为准,同步A B数据,使AB数据保持一致。

1.1 A中导出数据

(1)对A库加锁,避免同步时数据发生改变:

mysql>use database_name;

mysql> flush tables with read lock;                 #关闭所有打开的表,同时对于所有数据库中的表都加一个读锁,直到显示地执行unlock tables,该操作常常用于数据备份的时候。也就是将所有的脏页都要刷新到磁盘,然后对所有的表加上了读锁,于是这时候直接拷贝数据文件也就是安全的。为此库下的所有表施加读锁,退出会话后失效,所谓读锁,也就是只能读,不能写。

(2)使用mysqldump工具导出数据:

mysqldump -uroot -pxxx -R database_name >database_name.sql        # -R参数表示同时备份函数

(3)记下binlog日志中Position的位置(用于slave连接A做复制时会用到)

mysql> show master status\G;             # mysql-bin.000003  pos=443

(4)解锁数据库:

mysql>unlock tables;

1.2 将A备份的数据导入到B中

[root@localhost ~]# mysql -uroot -pxxx < database_name.sql

 

2. 配置Master(A)

(1)master中创建一个仅用于主从复制的账号,给与REPLICATION SLAVE权限。此权限仅允许slave访问Master的bin-log日志。

在Master中创建一个仅用于复制的mysql用户,并仅给与复制权限。

mysql> create user 'repl_A'@'192.168.1.2' identified by '123';

mysql> grant replication slave on *.* to 'repl_A'@'192.168.1.2';

mysql>grant replication slave on *.* to ‘repl_A’@ ‘192.168.1.2’ identified by ‘123’;    #上面两句可以直接简略为这一句。

(2)master开启二进制日志

vim /etc/my.cnf 或者 vim /usr/my.cnf (在[mysqld]下添加:)

server-id=1                       #指定master主机的id,不可为0,否则拒绝所有slave连接。

log-bin=mysql_bin                  #指定bin-log文件前缀名称,开启binlog日志

binlog_do_db=database_name        #指定binlog日志是记录的是哪个库

replicate-do-db=database_name       #指定复制哪一个库

auto-increment-increment = 2   //每次增长2

auto-increment-offset = 1  //设置自动增长的字段的偏移量,即初始值为1

log_bin_trust_function_creators=1            #详解如下方

expire_logs_days = 10            #保留10天的bin_log日志,防止日志太多占用磁盘空间

max_binlog_size = 100M              #限制每个bin_log日志大小最大为100M。

log-slave-updates=1        #slave执行master的sql后,将sql记录在binlog日志中(默认是不记录的)——实际生产我没开启这条

max_connections=600             #指定最大连接数

wait_timeout=5                       #等待超时

#重启mysql使配置生效。

3. 配置Slave(B)

(1)配置slave的server-id

示例:[root@iZ2z usr]# vim my.cnf

[mysqld]

server-id=2

    auto-increment-increment = 2  //每次增长2

     auto-increment-offset = 2 //设置自动增长的字段的偏移量,即初始值为2

注:二都只有server_id不同和 auto-increment- offset不同
  auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两
  台服务器,所以值设为2。

重启mysql使配置生效。

(2)配置连接master的相关信息配置。

在slave中指定master相关参数。

你可以一行一行的配置master连接信息。

mysql>change master to master_host='192.168.1.1',  #指定master主机IP地址

>master_user='repl_A',          #指定一个(在master中)有复制权限的用户

>master_port=3306,                               

>master_password='123',                           #指定上述有复制权限用户的密码

>master_log_file='mysql-bin.000003',       #指定开始复制的binlog二进制文件。

>master_log_pos=443;           #指定(在master二进制文件中)要开始复制的位置。#注意:  master_log_pos的值无需加引号,否则报错!

或者

将master连接信息配置写在一行。

mysql>change master to master_host='192.168.1.1',master_user='repl',master_password='123',master_log_file='mysql-bin.000003',master_log_pos=443;

解释:

连接master的配置信息在命令行中配置好后,默认存在/var/lib/mysql/master.info文件,可以使用show master status\G;命令查看,所有就算重启也不用担心连接master的配置丢失。

(3)开启slave

slave中:start slave;

Slave_IO_Running和Slave_SQL_Running的状态都是YES,说明同步开启成功。

  • master(B库) --->  slave(A库)

Master(B)配置

(1)master中创建一个仅用于主从复制的账号

mysql> grant  REPLICATION SLAVE  on  *.*  to  'repl_B'@'192.168.1.1'  identified by  '123';

(2)查看B库中binlog日志的位置

mysql> show master status\G;             # mysql_bin.000004   pos=558

(3)同步数据

mysql>change master to master_host='192.168.1.2',

>master_user='rel_B,

>master_port=3306,

>master_password='123',

>master_log_file='mysql_bin.000004',

>master_log_pos=558;

(4)开启slave

A(slave)库中:start slave;

(5)测试验证

 

解释:

log_bin_trust_function_creators=1  

当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建。

server-id=1    

原理:在master中,您必须配置一个独特的服务器ID(可能需要重新启动服务器)和启用二进制日志,slave的复制基于master的二进制日志。如果没有使用log-bin选项启用二进制日志,复制是不可能的。每个slave与master必须配置一个独特的ID。这个ID用于识别主从服务器,而且必须是一个正整数1和(232)−1之间。

验证:

1. ls /var/lib/mysql/ 会发现有mysql-bin.000001mysql、mysql-bin.index ,表示启用二进制日志成功。

mysql_bin.000001:         Master记录操作的二进制日志文件。

mysql_bin.index:     二进制文件的索引文件,存放二进制日志文件的名字和路径。

2. 命令查看

#查看否开启了bin-log     mysql> show variables like '%log_bin%';

#查看bin-log相关参数     mysql> show variables like '%binlog%';

#当前mysql二进制日志文件的默认位置       mysql> show variables like '%datadir%';

#查看mysql二进制文件名称及大小                     mysql> show binary logs;

3. Master常用命令

#查看Master复制状态             mysql> show master status;

#查看二进制日志文件事件内容 mysqlbinlog mysql-bin.xxx        ---可读性差

#查看二进制日志文件事件内容 mysql> show binlog events in 'mysql-bin.000003';

4. 管理二进制日志文件

#删除二进制日志文件

手动删除:

语法:                   > PURGE {MASTER | BINARY} LOGS TO 'log_name'

> PURGE {MASTER | BINARY} LOGS BEFORE 'date'

#我使用时没发现MASTER 和BINARY的区别,都一样用,都可以。

mysql> purge binary logs to 'mysql_bin.000002';

//删除mysql_bin.000002之前的二进制日志文件,并同步删除日志索引文件mysql_bin.index中mysql_bin.000002之前的索引信息。注意不包含mysql_bin.000002

mysql> purge master logs before '2017-07-20 21:58:00';              //清除2017-07-20 21:58:00 之前的二进制日志,并同步清楚日志索引文件的信息。

自动删除:

my.cnf中加入以下,然后重启:

SET GLOBAL expire_logs_days = 7              \\设置二进制日志只保留7天的

-------如果不想重启直接mysql> SET GLOBAL expire_logs_days = 7

#重置master二进制日志文件及内容

mysql> reset master;

或者是

mysql>flush logs;

mysql的主主复制详解的更多相关文章

  1. MySQL异步复制、半同步复制详解

    MySQL数据复制的原理图大致如下: 从上图我们可以看出MySQL数据库的复制需要启动三个线程来实现: 其中1个在主服务器上,另两个在从服务器上.当发出START SLAVE时,从服务器创建一个I/O ...

  2. Nginx主配置参数详解,Nginx配置网站

    1.Niginx主配置文件参数详解 a.上面博客说了在Linux中安装nginx.博文地址为:http://www.cnblogs.com/hanyinglong/p/5102141.html b.当 ...

  3. Nginx 主配置文件参数详解

    Nginx 主配置文件参数详解 Nginx 安装完毕后,会有响应的安装目录,安装目录里 nginx.conf 为 nginx 的主配置文件, ginx 主配置文件分为 4 部分,main(全局配置). ...

  4. MySQL Cluster 配置文件(config.ini)详解

    MySQL Cluster 配置文件(config.ini)详解 ################################################################### ...

  5. Mysql数据库导入命令Source详解

    Mysql数据库导入命令Source详解 几个常用用例: 1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u root -p dat ...

  6. MySQL数据类型以及基本使用详解

    MySQL数据类型以及基本使用详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL服务器的主要组件 我们知道MySQL的主要组件主要是由服务端(mysqld)和客户端 ...

  7. mysql互为主从实战设置详解及自动化备份(Centos7.2)

    mysql互为主从实战设置详解(Centos7.2) 第一步:mysql配置  my.cnf配置 服务器1 (10.89.10.90) [mysqld]  server-id=1  log-bin=/ ...

  8. mysql 聚集函数 count 使用详解

    mysql 聚集函数 count 使用详解 本文将探讨以下问题 1.count(*) . count(n).count(null)与count(fieldName) 2.distinct 与 coun ...

  9. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

  10. MYSQL常用内置函数详解说明

    函数中可以将字段名当作变量来用,变量的值就是该列对应的所有值:在整理98在线字典数据时(http://zidian.98zw.com/),有这要一个需求,想从多音字duoyinzi字段值提取第一个拼音 ...

随机推荐

  1. ORACLE 11gR2 RAC添加删除(正常及强制)节点操作步骤(删除篇)

    ORACLE 11gR2 RAC添加删除(正常及强制)节点操作步骤(删除篇) 本文主要转载 [  http://www.cnxdug.org/?p=2511 ] 有部分细节自己实验添加,再此谢谢前辈. ...

  2. slf4j+logback搭建超实用的日志管理模块

    文章转自http://www.2cto.com/kf/201702/536097.html slf4j+logback搭建超实用的日志管理模块(对日志有编号管理):日志功能在服务器端再常见不过了,我们 ...

  3. Linux中进程与线程的概念以及区别

    linux进程与线程的区别,早已成为IT界经常讨论但热度不减的话题.无论你是初级程序员,还是资深专家,都应该考虑过这个问题,只是层次角度不同罢了.对于一般的程序员,搞清楚二者的概念并在工作中学会运用是 ...

  4. PAT A1020 Tree Traversals (25 分)——建树,层序遍历

    Suppose that all the keys in a binary tree are distinct positive integers. Given the postorder and i ...

  5. Oracle 在存储过程或函数中执行字符串sql

    有时,我们需要在存储过程或函数中根据条件拼凑一些sql字符串语句,然后再执行拼凑后的sql字符串,如何做到呢? 参考以下代码: FUNCTION CALCULATE_TARGET_SCORE (CUR ...

  6. Google 是如何收集我们的个人数据的

    简评:还有其他公司比 Facebook 更能收集我们的数据么?大概,可能,没准是谷歌.(文末彩蛋) 最近 Facebook 已经因为收集个人数据而站在了聚光灯前,它收集用户数据并因此获利. 但是要知道 ...

  7. samba服务,连接远程开发机

    到了新环境,自己的开发机需要通过跳板机连,每次登录跳板机都需要RSA动态密码.一开始让我迷惑的是,这有个跳板机,那怎么让本地代码和开发机代码同步呢.以前公司的情况,一个是不需要跳板机,在phpstor ...

  8. mvn打包到私服的命令

    1.mvn clean package install -Dmaven.test.skip=true deploy 2.docker清楚Nexus私服上包的命令: a) docker exec -it ...

  9. 解决微软surface pro在某些情况下wifi转输速度过慢的问题 - z

    我是新款i7 surface.昨天到的货,狗东. 在公司使用的时候网络很正常,但回到家里之后就特别卡.5G频段也特别卡,基本处于无法观看视频的地步.台式电脑(我台式用的无线网卡)和手机都没问题. 于是 ...

  10. odoo在底部显示指定字段合计和汇总时显示合计

    1.odoo的tree视图底部显示合计 tree 视图,底部显示指定字段合计数 ,视图中字段定义上在sum,取自sale.view_order_tree 销售订单 tree 视图 <field ...