文档章节

MySQL5.7主主复制配置

MrMyj
 MrMyj
发布于 2017/10/12 18:47
字数 1446
阅读 563
收藏 68
点赞 3
评论 2

MySQL5.7主主复制配置

主机1IP:172.16.1.206
主机2IP:172.16.1.226

一、首先安装MySQL 5.7
1、卸载两台主机系统中已经有的mysql相关软件包
rpm -qa | grep -i mysql
yum remove mysql(相关软件包名称) -y

2、分别在两台主机系统中执行以下命令
在http://dev.mysql.com/downloads/repo/yum/站点下载mysql57-community-release-el6-8.noarch
rpm -ivh mysql57-community-release-el6-8.noarch.rpm 
yum -y install mysql.x86_64 mysql-server.x86_64 mysql-devel.x86_64

3、分别在两台主机上执行以下语句,初始化

mkdir /home/mysql
mysqld --initialize-insecure --user=mysql --datadir=/home/mysql

备注:
    如果你用 --initialize 初始化data目录,请用如下命令登录服务
    mysql -u root -p
    执行上面命令,会提示输入密码,输入随机生成的密码即可。
    如果你不知道这个随机密码,请查看error log文件查找这个随机密码。
        
    如果用 --initialize-insecure 初始化data目录,请用root用登录,并不需要输入密码就可以登录,如下命令:
    mysql -u root --skip-password
    
Mysql5.7忘记root密码及mysql5.7修改root密码的方法的相关资料
a、关闭正在运行的 MySQL :service mysql stop
b、运行:mysqld_safe --skip-grant-tables &
c、为了安全可以这样禁止远程连接:mysqld_safe --skip-grant-tables --skip-networking &    
d、使用mysql连接server:mysql -p
e、更改密码:
mysql> update mysql.user set authentication_string=password('shopym') where user='root' and Host = 'localhost';     

特别提醒注意的一点是,新版的mysql数据库下的user表中已经没有Password字段了
而是将加密后的用户密码存储于authentication_string字段

4、分别登录修改主机1、主机2的mysql密码
输入mysql回车,进入mysql环境
set password = password ('shopym');
flush privileges;

5、在主机1(192.168.1.2)的/etc/my.cnf中配置以下内容
[mysqld]
datadir=/home/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id = 1
auto-increment-increment = 2
auto-increment-offset = 1

explicit_defaults_for_timestamp = 1
character_set_server=utf8
interactive_timeout = 57600
log-bin = mysql-bin

expire-logs-days = 100
replicate-do-db  = wang                 #需要同步的数据库
binlog-ignore-db  = mysql
binlog-ignore-db  = information_schema

slave-skip-errors=all
log-slave-updates
symbolic-links=0 
skip-name-resolve

6、在主机1(192.168.1.4)的/etc/my.cnf中配置以下内容
[mysqld]
datadir=/home/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server-id = 2
auto-increment-increment = 2
auto-increment-offset = 2

character_set_server=utf8
interactive_timeout = 57600
log-bin = mysql-bin
expire-logs-days = 100

replicate-do-db = wang                   #需要同步的数据库
binlog-ignore-db = mysql
binlog-ignore-db = information_schema

slave-skip-errors=all
log-slave-updates
symbolic-links=0
skip-name-resolve

备注:主机1和主机2都只有server-id不同和 auto-increment- offset不同
auto-increment-offset是用来设定数据库中自动增长的起点的,回为这两能
服务器都设定了一次自动增长值2,所以它们的起点必须得不同,这样才能避
免两台服务器数据同步时出现主键冲突replicate-do-db 指定同步的数据库,
我们只在两台服务器间同步shoym数据库
另:auto-increment-increment的值应设为整个结构中服务器的总数,本案例用到两台服务器,所以值设为2


7、分别重启主机1,主机2的mysql服务,使配置生效
service mysqld restart

8、在主机1(192.168.1.2)上创建数据库和表并插入数据
mysql -uroot -pwclwcw
create database wang;
use wang;
create table wclwcw(id int,name varchar(100));
insert into wclwcw value (1,'tom')

9、相互授权
在主机1(172.16.1.206)上
GRANT REPLICATION SLAVE ON *.* TO 'shopym'@'172.16.1.226' IDENTIFIED BY 'shopym';
flush privileges;

在主机2(172.16.1.226)上
GRANT REPLICATION SLAVE ON *.* TO 'shopym'@'172.16.1.206' IDENTIFIED BY 'shopym'    
flush privileges;

10、互告bin-log信息
a、在主机1(192.168.1.2)上
mysql> show master status;
+------------------+----------+--------------+--------------------------+
| File     | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql-bin.000006 |      106 |      | mysql,information_schema |
+------------------+----------+--------------+--------------------------+

b、在主机2(192.168.1.4)上
mysql> show master status;
+------------------+----------+--------------+--------------------------+
| File     | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql-bin.000008 |      192 |      | mysql,information_schema |
+------------------+----------+--------------+--------------------------+

c、在主机1(172.16.1.206)上
mysql> change master to master_host='172.16.1.226',master_user='shopym',master_password='shopym',master_log_file='mysql-bin.000008',master_log_pos=120;

d、在主机2(192.168.1.226)上
mysql> change master to master_host='172.16.1.206',master_user='shopym',master_password='shopym',master_log_file='mysql-bin.000014',master_log_pos=120;

RDS 是独特的 需要这个方法 两边用GTID来数据同步

change master to master_host='.rds.aliyuncs.com',master_user='0000000',master_password='1q2.......#',master_auto_position=1;

 

 

 

show global variables like 'gtid_purged';
然后拿着这个value,去从库上依次
stop slave;
set global gtid_purged = 'xxx'; # xxx是你主库上查到的value。
start slave;

进过测试RDS需要先查询

set global gtid_purged ='077e9f57-b83f-11e6-844c-7cd30abff676:1-10479976,fa4f2610-b83e-11e6-844c-7cd30abff66a:1-5683819';

要是出现:
ERROR 1840 (HY000): @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.
则需要执行:
reset master;

11、在主机1、主机2两服务器都执行以下命令
mysql> start slave;

12、查看状态
主机1上(172.16.1.206)
mysql> show slave status\G;

..............
在主机2(172.16.1.206)上
mysql> show slave status\G;
 .............
当看到了两个yes,即:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
说明已经配置成功了,同时查看主机2中是否已经有主机1中的数据库

其他
同步数据
用test做的实验,导出将test.sql文件从1.4服务器拷贝到1.2服务器
备份数据前先锁表,保证数据一致性
mysql> FLUSH TABLES WITH READ LOCK;
# mysqldump -uroot -p123456 test> /tmp/test.sql;

mysql> UNLOCK TABLES;

scp /tmp/test.sql root@192.168.1.2:/tmp

在搭建mysql master-slave复制环境时,一切都正常,但是在slave上执行:show slave status\G; 时,出现下面的状况:
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes

一直无法进行正确的复制。查看错误日志文件显示:Connecting error_code:2003
看来是slave 没有连接上master,在网上搜索一下,网上文章大都只是指出了可能的三种错误:
1. 网络不通
2. 密码不对
3. pos不对

我测试网络是可以ping通的。密码也对,pos也对。

后来想了很久,突然想起来了防火墙好像没有关闭!一检查果然。
所以第四种错误是:
4. 防火墙没有关闭。

相关命令如下:
关闭命令:  service iptables stop
永久关闭防火墙:chkconfig iptables off

两个命令同时运行,运行完成后查看防火墙关闭状态
service iptables status

另外顺便也将 selinux关闭掉:
1      vi /etc/selinux/config
2      #SELINUX=enforcing     #注释掉
3      #SELINUXTYPE=targeted  #注释掉
4      SELINUX=disabled  #增加
5      :wq  #保存,关闭。
6      shutdown -r now   #重启系统

查看SELinux的状态:
getenforce

© 著作权归作者所有

共有 人打赏支持
MrMyj
粉丝 11
博文 17
码字总数 6807
作品 0
朝阳
技术主管
加载中

评论(2)

doge_刀戈
doge_刀戈
docker run mysql ???
MrMyj
MrMyj
推荐使用 宝塔虚拟机管理 30分钟 搞定 只需要最后几段 查看 master 的 命令设置重启完成
MySQL架构的优化

mysql的复制: mysql的二进制日志:记录了所有对MySQL数据库的数据增删查改和对表和数据库的修改 binlog命令行的工具进行查看 二进制日志格式:

Panda_Jerry
2017/11/12
0
0
即将开源的新一代MySQL高可用组件:MySQL Plus

在基于MySQL传统复制的时代(MySQL版本低于5.5),MHA在MySQL高可用中可以说是独领风骚。 在MySQL 5.6及GTID的出现后,MHA在这方面就显的不那么给力了,和MHA作者交流,作者基本放弃对该软件...

技术小能手
04/20
0
0
MySQL主从延迟解决方案

最近一段时间内,无论在博客评论还是私信里,技术老铁们都对老张写的博客表示认可和支持,我很欣慰!从业多年就希望有一天能把自己学过的东西,遇到的问题,分享出来!我们大家一起进步! 今...

superZS
2017/08/23
0
0
MMM+Amoeba搭建MySQL高可用负载均衡群集

MySQL的主从复制和MySQL的读写分离两者有着紧密联系,首先要部署主从复制,只有主从复制完成了,才能在此基础上进行数据的读写分离。MySQL的读写分离就是只在主服务器上写,只在从服务器上读...

cchenyz
昨天
0
0
GTID!MySQL复制中的核武器

各位老铁们,本周老张的《MySQL王者晋级之路》一书终于出版了,现在可以预购啦! 预购链接地址:老张的数据库微店 前前后后经历了一年的准备时间,可谓十年磨一剑,把自己从业所有的精华和心...

superZS
06/26
0
0
mysql高可用架构设计,处理高并发,大流量!

  主要介绍:复制功能介绍、mysql二进制日志、mysql复制拓扑、高可用框架、单点故障、读写分离和负载均衡介绍等   mysql复制功能介绍   mysql复制功能提供分担读负载   复制解决的问...

思梦教育
06/26
0
0
在ECS上轻松搭建RDS的从实例

场景 由于一些特殊的原因,某燃气公司线下ECS上需要在ECS上搭建一套从库,需要同步RDS数据库的数据(mysql5.7版本)。 实现RDS for mysql与线下ECS上自建数据库数据实时同步,阿里云官方推荐使...

卓见架构狮
06/26
0
0
光看"北京蓝"不如搞懂MHA-教你最新版本VIP模式搭建

小伙伴们,好久没有发手记了,大家有没有期待,哈哈! 今天我给大家分享一篇“Mysql5.7版本实现基于VIP的MHA搭建” 为什么要单独来写这一篇手记呢?在正式讲解搭建步骤之前,我们先聊聊Mysql...

Jeson老师
06/30
0
0
Semi-sync master failed on net_flush() before wait

BUG描述: Semi-sync master failed on net_flush() before waiting for slave reply MariaDB 10.0.25 Centos6.6 这是7月7下午4点因网络抖动,发生的半同步复制hang住的一个BUG。当时的现象就...

hcymysql
07/18
0
0
mysql5.7主从同步配置

1. 准备工作 (本文永久地址:http://woymk.blog.51cto.com/10000269/1922438) 配置环境:centos6.9,mysql5.7 先安装、配置好两台MySQL服务器 主服务器IP:192.168.1.1 从服务器IP:192.1...

woymk
2017/05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

用Python绘制红楼梦词云图,竟然发现了这个!

Python在数据分析中越来越受欢迎,已经达到了统计学家对R的喜爱程度,Python的拥护者们当然不会落后于R,开发了一个个好玩的数据分析工具,下面我们来看看如何使用Python,来读红楼梦,绘制小...

猫咪编程
21分钟前
0
0
Java中 发出请求获取别人的数据(阿里云 查询IP归属地)

1.效果 调用阿里云的接口 去定位IP地址 2. 代码 /** * 1. Java中远程调用方法 * http://localhost:8080/mavenssm20180519/invokingUrl.action * @Title: invokingUrl * @Description: * @ret......

Lucky_Me
44分钟前
1
0
protobuf学习笔记

相关文档 Protocol buffers(protobuf)入门简介及性能分析 Protobuf学习 - 入门

OSC_fly
昨天
0
0
Mybaties入门介绍

Mybaties和Hibernate是我们在Java开发中应用的比较多的两个ORM框架。当然,目前Mybaties正在慢慢取代Hibernate,这是因为相比较Hibernate而言Mybaties性能更好,响应更快,更加灵活。我们在开...

王子城
昨天
2
0
编程学习笔记之python深入之装饰器案例及说明文档[图]

编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰...

原创小博客
昨天
0
0
流利阅读笔记33-20180722待学习

黑暗中的生物:利用奇技淫巧快活生存 Daniel 2018-07-22 1.今日导读 如果让你在伸手不见五指的黑暗当中生存,你能熬过几天呢?而大千世界,无奇不有。在很多你不知道的角落,有些生物在完全黑...

aibinxiao
昨天
6
0
Hystrix降级逻辑中如何获取触发的异常

通过之前Spring Cloud系列教程中的《Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)》一文,我们已经知道如何通过Hystrix来保护自己的服务不被外部依赖方拖垮的情况。但是实际...

程序猿DD
昨天
1
0
gin endless 热重启

r := gin.New()r.GET("/", func(c *gin.Context) {c.String(200, config.Config.Server.AppId)})s := endless.NewServer(":8080", r)s.BeforeBegin = func(add string) ......

李琼涛
昨天
1
0
JAVA模式之代理模式

平时一直在用spring,spring中最大的特效IOC和AOP,其中AOP使用的就是代理模式.闲着无聊,随手写了一个代理模式,也记录下代理模式的实现Demo. 比如现在有一个场景是:客户想要增加一个新的功能,...

勤奋的蚂蚁
昨天
0
0
ES15-JAVA API 索引管理

1.创建连接 创建连接demo package com.sean.esapi.client;import java.net.InetSocketAddress;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.clien......

贾峰uk
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部