文档章节

MySQL主从配置——双主

阿dai
 阿dai
发布于 2017/09/02 11:55
字数 1307
阅读 100
收藏 1
点赞 0
评论 0

MySQL主从配置——双主

本人是测试环境,准备了两台安装好mysql的服务器(masterA和masterB),可以保证没数据写入,否则需要先将两台服务器上的数据一致,然后再进行主从配置,步骤是:先masterA锁表-->masterA备份数据-->masterA解锁表-->将masterA数据导入masterB-->设置主从。

环境

mark

MySQL双主(主主)架构思路:

  1. 两台mysql都可读写,互为主备,默认只使用一台(masterA)负责数据的写入,另一台(masterB)备用;
  2. masterA是masterB的主库,masterB又是masterA的主库,它们互为主从;
  3. 所有提供服务的从服务器与masterB进行主从同步(即可实现双主多从);

架构图

mark

搭建主从配置

创建主从同步用户

masterA:

[root@adailinux ~]# mysql -uroot
mysql> grant replication slave on *.* to 'repl'@'192.168.8.132' identified by '123456';
#注:在此指定IP为masterB(从服务器)的IP
mysql> flush privileges;

masterB:

[root@adailinux ~]# mysql -uroot
mysql> grant replication slave on *.* to 'repl'@'192.168.8.131' identified by '123456';
#注:在此指定IP为masterA(主服务器)的IP
mysql> flush privileges;

配置mysql(/etc/my.cnf)

配置masterA

[root@adailinux ~]# vim /etc/my.cnf
[mysqld]
datadir = /data/mysql
socket = /tmp/mysql.sock
server_id = 1                 #指定server-id,必须保证主从服务器的server-id不同
auto_increment_increment = 2  #设置主键单次增量
auto_increment_offset = 1     #设置单次增量中主键的偏移量
log_bin = mysql-bin           #创建主从需要开启log-bin日志文件
log-slave-updates             #把更新的日志写到二进制文件(binlog)中

配置masterB

[root@adailinux ~]# vim /etc/my.cnf
[mysqld]
datadir = /data/mysql
socket = /tmp/mysql.sock
server_id = 2                 #指定server-id,必须保证主从服务器的server-id不同
auto_increment_increment = 2  #设置主键单次增量
auto_increment_offset = 2     #设置单次增量中主键的偏移量
log_bin = mysql-bin           #创建主从需要开启log-bin日志文件
log-slave-updates             #把更新的日志写到二进制文件(binlog)中

以上为同步配置的核心参数!

参数解析

log-slave-updates = true
#将复制事件写入binlog,一台服务器既做主库又做从库此选项必须要开启

自增长ID:

#masterA:
auto_increment_offset = 1
auto_increment_increment = 2 
#奇数ID

#masterB:
auto_increment_offset = 2
auto_increment_increment = 2 
#偶数ID

其他参数:

binlog-format=ROW             #日志格式
#binlog-do-db=TSC              #同步数据库名称
binlog-ignore-db=mysql        #忽略数据库名称
replicate-do-db=TSC           #指定进行主从的数据
replicate-ignore-db=mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = test
replicate-ignore-db = zabbix  #忽略不进行主从同步的数据
skip-character-set-client-handshake  #忽略应用程序想要设置的其他字符集
init-connect='SET NAMES utf8'        #连接时执行的SQL
character-set-server=utf8            #服务端默认字符集
wait_timeout=1800                    #请求的最大连接时间
interactive_timeout=1800             #和上一参数同时修改才会生效
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES   #sql模式
#expire_logs_days = 20        #设置log-bin的保留时间(在此不设置)
#max-binlog-size= 512M        #限定log-bin文件的大小

注: 开始配置my.cnf时添加了全部参数进去,但是最后即便同步配置完成了也未能完成新建的库的同步,暂时未找到原因(猜测:和replicate参数有关),之后持续更新。

重启MySQL服务

分别重启masterA和masterB并查看主库状态。

[root@adailinux ~]# /etc/init.d/mysqld restart 
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 

masterA:
[root@adailinux ~]# mysql -uroot
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      419 | TSC          | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

masterB:
[root@adailinux ~]# mysql -uroot
mysql> show master status
    -> ;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      419 | TSC          | mysql            |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

配置同步信息

masterA:

[root@adailinux ~]# mysql -uroot
mysql> change master to master_host='192.168.8.132',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=419;
#注:IP为masterB的IP(即,从服务器的IP)
mysql> start slave;
Query OK, 0 rows affected (0.05 sec)

mysql> show slave status\G;
在此查看有如下状态说明配置成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

masterB:

[root@adailinux ~]# mysql -uroot
mysql>change master to master_host='192.168.8.131',master_port=3306,master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=419; 
Query OK, 0 rows affected, 2 warnings (0.06 sec)

mysql> start slave;
Query OK, 0 rows affected (0.04 sec)

mysql> show slave status\G
在此查看有如下状态说明配置成功:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

主从同步测试

在masterA上创建一个库:

mysql> create database adai0001;
Query OK, 1 row affected (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| adai0001           |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.04 sec)

查看masterB上的库:

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| adai0001           |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.02 sec)

即,配置完成!

常见错误

执行“show slave status\G”后,masterB正常,masterA中状态如下:

Slave_IO_Running: Connecting
Slave_SQL_Running: Yes

说明masterA同步masterB(A为从服务器;B为主服务器)未成功!查看错误日志:

[root@adailinux ~]# less /data/mysql/adailinux.err
2017-09-01 23:52:34 3579 [ERROR] Slave I/O: error connecting to master 'repl@192.168.8.132:3306' - retry-time: 60  retries: 3, Error_code: 1130

没有更多信息,查询错误代码:

[root@adailinux ~]# perror 1130
MySQL error code 1130 (ER_HOST_NOT_PRIVILEGED): Host '%-.64s' is not allowed to connect to this MySQL server

意识是不允许连接该服务器,常见的原因有两种:

  • 防火墙问题:查看防火墙,关闭系统防火墙,或增加iptables规则开放3306端口
  • 权限问题:在创建同步用户‘repl’时授权不不正确,解决办法是更改用户权限

经过上面两种操作,一般能解决该问题,如果还没解决,只能再继续排错了。

该部分内容持续更新...

参考

自动同步脚本:https://www.2cto.com/database/201312/261880.html
主从同步复制:http://www.cnblogs.com/ygqygq2/p/6045279.html

http://www.cnblogs.com/kristain/articles/4142970.html

官方文档(关于参数server-id、 auto_increment_increment):
https://dev.mysql.com/doc/refman/5.7/en/replication-options-master.html

© 著作权归作者所有

共有 人打赏支持
阿dai
粉丝 57
博文 176
码字总数 252504
作品 0
昌平
运维
MySQL Replication 主从复制全方位解决方案

原文:MySQL Replication 主从复制全方位解决方案 1.1 主从复制基础概念     在了解主从复制之前必须要了解的就是数据库的二进制日志(binlog),主从复制架构大多基于二进制日志进行,二进制...

杰克.陈 ⋅ 01/03 ⋅ 0

Mycat学习实战-Mycat基本功能

Mycat学习实战-Mycat基本功能 Mycat学习实战-Mycat基本功能 1. Mycat高可用-读写分离 2. Mycat高可用-多主切换 3 注解 1. Mycat高可用-读写分离 1.1 读写分离配置参数 Schema.dataHost 参数b...

ygqygq2 ⋅ 2017/10/19 ⋅ 0

MySQL的主从复制介绍及配置

1.MySQL主从复制介绍 MySQL数据库支持单向、双向、链式级联、环状等不同业务场景的复制。在复制过程中,一台服务器充当主服务器(Master),接收来自用户的内容更新,而一个或多个其他的服务...

10pcm ⋅ 04/05 ⋅ 0

Mysql数据库主从心得整理

管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行...

1362802538 ⋅ 2016/12/02 ⋅ 0

Mysql数据库主从心得整理(转)

管理mysql主从有2年多了,管理过200多组mysql主从,几乎涉及到各个版本的主从,本博文属于总结性的,有一部分是摘自网络,大部分是根据自己管理的心得和经验所写,整理了一下,分享给各位同行...

张锦飞 ⋅ 06/07 ⋅ 0

双机高可用、负载均衡、MySQL (读写分离、主从自动切换)架构设计

架构简介 前几天网友来信说帮忙实现这样一个架构:只有两台机器,需要实现其中一台死机之后另一台能接管这台机器的服务,并且在两台机器正常服务时,两台机器都能用上。于是设计了如下的架构...

card123 ⋅ 2016/08/10 ⋅ 0

MySQL主从同步

1、Replication 线程 Mysql的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instan...

早安_南京 ⋅ 2015/01/02 ⋅ 0

Mysql-proxy实现MariaDB读写分离

Mysql Proxy 简介 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测、分析、或改变它们的通信。它使用灵活,没有限制,常见的用途包括:负载平衡,故障、查询分...

jungege1216 ⋅ 2014/05/14 ⋅ 0

Mysql主从复制

一、试验环境: rhel1————master————192.168.10.1————供slave同步的用户和密码都为slave rhel2————slave————192.168.10.2————同步master上的所有数据库 二、分别在r...

MF在路上 ⋅ 2014/10/11 ⋅ 0

MySQL主从复制常见故障及解决方法

MySQL主从复制常见故障及解决方法? 1.1.1故障1:从库数据与主库冲突 解决方案: ###方法1: ###方法2:在从库配置文件中配置,直接跳过不影响业务的错误号 1.1.2故障2:MySQL主从复制延迟问...

科技探索者 ⋅ 2017/11/21 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从零开始搭建Risc-v Rocket环境---(1)

为了搭建Rocke环境,我买了一个2T的移动硬盘,安装的ubuntu-16.04 LTS版。没有java8,gcc是5.4.0 joe@joe-Inspiron-7460:~$ java -version程序 'java' 已包含在下列软件包中: * default-...

whoisliang ⋅ 21分钟前 ⋅ 0

大数据学习路线(自己制定的,从零开始学习大数据)

大数据已经火了很久了,一直想了解它学习它结果没时间,过年后终于有时间了,了解了一些资料,结合我自己的情况,初步整理了一个学习路线,有问题的希望大神指点。 学习路线 Linux(shell,高并...

董黎明 ⋅ 27分钟前 ⋅ 0

systemd编写服务

一、开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。 如果你想让该软件开机启动,就执行下面的命令(以httpd.service为例)。 ...

勇敢的飞石 ⋅ 29分钟前 ⋅ 0

mysql 基本sql

CREATE TABLE `BBB_build_info` ( `community_id` varchar(50) NOT NULL COMMENT '小区ID', `layer` int(11) NOT NULL COMMENT '地址层数', `id` int(11) NOT NULL COMMENT '地址id', `full_......

zaolonglei ⋅ 38分钟前 ⋅ 0

安装chrome的vue插件

参看文档:https://www.cnblogs.com/yulingjia/p/7904138.html

xiaoge2016 ⋅ 41分钟前 ⋅ 0

用SQL命令查看Mysql数据库大小

要想知道每个数据库的大小的话,步骤如下: 1、进入information_schema 数据库(存放了其他的数据库的信息) use information_schema; 2、查询所有数据的大小: select concat(round(sum(da...

源哥L ⋅ 今天 ⋅ 0

两个小实验简单介绍@Scope("prototype")

实验一 首先有如下代码(其中@RestController的作用相当于@Controller+@Responsebody,可忽略) @RestController//@Scope("prototype")public class TestController { @RequestMap...

kalnkaya ⋅ 今天 ⋅ 0

php-fpm的pool&php-fpm慢执行日志&open_basedir&php-fpm进程管理

12.21 php-fpm的pool pool是PHP-fpm的资源池,如果多个站点共用一个pool,则可能造成资源池中的资源耗尽,最终访问网站时出现502。 为了解决上述问题,我们可以配置多个pool,不同的站点使用...

影夜Linux ⋅ 今天 ⋅ 0

微服务 WildFly Swarm 管理

Expose Application Metrics and Information 要公开关于我们的微服务的有用信息,我们需要做的就是将监视器模块添加到我们的pom.xml中: 这将使在管理和监视功能得到实现。从监控角度来看,...

woshixin ⋅ 今天 ⋅ 0

java连接 mongo伪集群部署遇到的坑

部署mongo伪集群 #创建mongo数据存放文件地址mkdir -p /usr/local/config1/datamkdir -p /usr/local/config2/data mkdir -p /usr/local/config3/data mkdir -p /usr/local/config1/l......

努力爬坑人 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部