1. 部署MYSQL主从同步 <M-S>

环境:mysql版本一致,均为5.7.18

master xuegod4  ip  192.168.10.34   数据库密码 yourpasswd

slave  xuegod5  ip  192.168.10.35   数据库密码 yourpasswd

1.1 配置主数据库xuegod4

1.1.1 创建需要同步的数据库:

mysql> create database HA;

mysql> use HA;

mysql> create table T1(id int,name varchar(20));

service mysqld stop

1.1.2 配置my.cnf

vim /etc/my.cnf

log-bin=mysql-bin-master #启用二进制日志

server-id=1 #本机数据库ID 标示

binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名

binlog-ignore-db=mysql #不可以被从服务器复制的库

1.1.3 重启mysql

service mysqld restart

1.1.4 授权

01. mysql> grant replication slave on *.* to slave@10.10.10.64 identified by "123456";

注:这里如果报错说密码太简单,可以修改密码策略

mysql> set global validate_password_policy=0

授权完后刷新权限:

mysql> flush privileges;

1.1.5 查看状态信息

mysql> show master status;

1.1.6 查看二进制日志

查看mysql数据目录,yum方式安装数据目录为/var/lib/mysql

[root@xuegod4 ~]# ls /var/lib/mysql

mysql> show binlog events\G

复制前要保证同步的数据库一致

[root@xuegod4 ~]# mysqldump -uroot -pyourpasswd HA >HA.sql           #可以导出数据库

将导出的数据库传给从服务器,方法:

[root@xuegod4 ~]# scp HA.sql 192.168.10.35:/root/

1.2 配置从数据库服务器xuegod5

1.2.1 两台数据库服务器mysql版本要一致

mysql> show variables like '%version%';

1.2.2 测试连接到主服务器是否成功

[root@xuegod5 ~]# mysql -uslave -pyourpasswd -h 192.168.10.34

看不到HA数据库,是因为只有复制的权限,没有读的权限。

1.2.3 导入数据库,和主数据库服务器保持一致

mysql> create database HA;

[root@xuegod5 ~]# mysql -uroot -pyourpasswd HA<HA.sql

1.2.4 修改从服务器配置文件

从服务器没必要开启bin-log日志

[root@xuegod5 ~]# service mysqld stop

[root@xuegod5 ~]# vim /etc/my.cnf

master-host=192.168.10.34   #指定主服务器IP地址

master-user=slave          #指定定在主服务器上可以进行同步的用户名

master-password=yourpasswd    #密码

mysql版本低于5.7版本才需要配置以上三句。5.7版本只需要配置:

server-id=2  #从服务器ID号,不要和主ID相同 ,如果设置多个从服务器,每个从服务器必须有一个唯一的server-id值,必须与主服务器的以及其它从服务器的不相同。

可以认为server-id值类似于IP地址:这些ID值能唯一识别复制服务器群集中的每个服务器实例。

1.2.5 配置从数据库服务器

[root@xuegod5 ~]# service mysqld restart     #重启mysql服务

mysql>stop slave; #停止slave

mysql> change master to master_host='192.168.10.34',master_user='slave',master_password='yourpasswd';

mysql> start slave; #启动slave

mysql> show slave status\G  #查看状态

Slave_IO_Running :一个负责与主机的io通信

Slave_SQL_Running:负责自己的slave mysql进程

再到主服务器上查看状态:

mysql> show processlist \G

1.3 插入数据测试同步

在主数据库服务器插入数据:

mysql> insert into T1 value(6,'yehailun');

Query OK, 1 row affected (0.05 sec)

在从数据库服务器上查询

mysql>  select * from T1;

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

| id   | name     |

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

|    6 | yehailun |

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

1 row in set (0.00 sec)

1.4 排错

如果遇到主从不同步,看一下主从bin-log的位置,然后再同步。

在主服务器上看二进制日志事件列表

mysql> show binlog events \G

从服务器执行MySQL命令下:

mysql> stop slave;

Query OK, 0 rows affected (0.03 sec)

mysql> change master to master_log_file='mysql-bin-master.000001',master_log_pos=1117;

Query OK, 0 rows affected (0.04 sec)

#根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果

mysql> start slave;

Query OK, 0 rows affected (0.03 sec)

mysql> show slave status\G

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如果都是yes就代表在同步

重启从服务器,再查看状态:

停止从服务器slave stop;

开启从服务器slave start;

排错思路:

1、二进制日志没有开启

2、IPTABLES 没有放开端口

3、对应的主机 IP地址写错了

SQL线程出错

1、主从服务器数据库结构不统一

出错后,数据少,可以手动解决创建插入,再更新slave状态。

注:如果主上误删除了。那么从上也就误删除了。 #因此主上要定期做mysqldump备份。

 

2. 部署MYSQL主主双向主从复制 M-M(恢复快照再实验)

通过mysql主主:进行mysql 双向同步数据库HA的配置

mysql主:服务端:xuegod4   IP:192.168.10.34

mysql主:服务端:xuegod5  IP:192.168.10.35

先清空一下二进制日志,mysql> reset master

在上面主从的基础上进行配置

2.1 创建需要同步的数据库

mysql> create database HA;

mysql> use HA;

mysql> create table T1(id int,name varchar(20));

2.2 配置xuegod4

它有两种身份:

身份1: xuegod5的主,身份2: xuegod5的从。

2.2.1 修改配置文件

[root@xuegod4 ~]# vim /etc/my.cnf

server-id = 1

log-bin=mysql-bin-master

binlog-do-db=HA

binlog-ignore-db=mysql       #避免同步mysql用户相关配置

2.2.2 重启mysql服务

[root@xuegod4 ~]# service mysqld restart

查状态

mysql> show master status;

2.2.3 授权给xuegod5做从

修改密码策略

mysql> set global validate_password_policy=0;

mysql> grant replication slave on *.* to slave@'192.168.10.35' identified by 'yourpasswd';

如果不符合密码要求报错修改如下(5.7版本)

mysql> set global validate_password_policy=0; #定义复杂度

mysql> set global validate_password_length=1; #定义长度 默认是8

刷新权限

mysql> flush privileges;

2.3 配置xuegod5

2.3.1 修改配置文件

mysql 5.1的配置

master-host=192.168.1.64 #指定主服务器IP地址

master-user=slave64 #指定定在主服务器上可以进行同步的用户名

master-password=123456 #密码

#master-port=3306 可以不写

replicate-do-db=HA #要复制的数据库

master-connect-retry=60 #断点重新连接时间

mysql 5.7配置

[root@xuegod5 ~]# vim /etc/my.cnf

server-id=2

log-bin=master-bin-slave

binlog-do-db=HA

binlog-ignore-db=mysql

2.3.2 重启mysql服务

[root@xuegod5 ~]# service mysqld restart

查看状态;

mysql> show master status;

2.3.3 测试一下从帐号登陆是否正常

[root@xuegod5 ~]# mysql -uslave -pyourpasswd -h 192.168.10.34

mysql: [Warning] Using a password on the command line interface can be insecure.

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 5

Server version: 5.7.18-log MySQL Community Server (GPL)

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

2.3.4 授权给xuegod4做从

mysql> grant replication slave on *.* to slave@'192.168.10.34' identified by 'yourpasswd';

如果不符合密码要求报错修改如下(5.7版本)

mysql> set global validate_password_policy=0; #定义复杂度

mysql> set global validate_password_length=1; #定义长度 默认是8

刷新权限

mysql> flush privileges;

2.4 指定xuegod5的master

mysql> change master to master_host='192.168.10.34',master_user='slave',master_password='yourpasswd';

mysql> start slave;

mysql> show slave status\G

2.5 指定xuegod4的master

mysql> change master to master192.168.10.35',master_user='slave',master_password='yourpasswd';

mysql> start slave;

2.6 xuegod4上查看slave的状态

mysql> show slave status\G

2.7 xuegod5上查看slave的状态

mysql> show slave status\G

2.8 插入数据测试

2.8.1 在xuegod4上插入数据,在xuegod5上查看

mysql> use HA

Database changed

mysql> insert into T1 values(1,'zhangsan');

Query OK, 1 row affected (0.02 sec)

2.8.2 在xuegod5上插入数据,在xuegod4上查看

mysql> insert into T1 value(2,'lisi');

Query OK, 1 row affected (0.06 sec)

注意:这种M-M架构没有什么好处,他往往给我们产生一种实现了负载均衡的错觉

3 部署M-S-S模型

环境:

xuegod4  master     mysql5.7.18      192.168.10.34

xuegod5  slave中继  mysql5. 7.18      192.168.10.35

xuegod6  slave      mysql5. 7.18      192.168.10.36

3.1 创建需要同步的数据库

mysql> create database HA;

mysql> use HA;

mysql> create table T1(id int,name varchar(20));

3.2 部署master xuegod4

3.2.1 授权

修改密码策略:

mysql> set global validate_password_policy=0;

在主服务上授权用户:

mysql> grant replication slave on *.* to 'repl'@192.168.10.35 identified by 'yourpasswd';

刷新权限:

mysql> flush privileges;

3.2.2 修改配置

[root@xuegod4 ~]# vim /etc/my.cnf

server-id = 1

binlog-do-db = HA

log-bin=mysql-bin-master

binlog-ignore-db=mysql

sync-binlog=1

binlog-format=row

重启服务:

[root@xuegod4 ~]# service mysqld restart

3.2.3 导出主服务器HA完整备份, 拷贝到 中继 和slave

[root@xuegod4 ~]# mysqldump -uroot -pyourpasswd HA -B>HA.sql   #使用-B导入数据库的时候不用新建库

[root@xuegod4 ~]# scp HA.sql 192.168.10.35:/root

[root@xuegod4 ~]# scp HA.sql 192.168.10.36:/root

3.3 部署slave中继xuegod5

3.3.1 导入数据库

mysql> create database HA;

[root@xuegod5 ~]# mysql -uroot -pyourpasswd HA<HA.sql

3.3.2 修改配置

[root@xuegod5 ~]# vim /etc/my.cnf

server-id=2

binlog-do-db=HA

log-bin=mysql-bin-slave1

binlog-ignore-db=mysql

binlog-format=row

log-slave-updates=1   #把它从relay-log当中读取出来的二进制日志并且这本机上执行的操作也记录这自己的二进制日志里面,这样才能使第三台slave通过中继slave读取到相应数据变化

重启服务:

[root@xuegod5 ~]# service mysqld restart

3.3.3 授权

mysql> change master to master_host='192.168.10.34',master_user='repl',master_password='yourpasswd';

mysql> start slave;

查一下状态:

再授权一个用户给slave(xuegod6)

mysql> set global validate_password_policy=0;   #修改密码策略

mysql> grant replication slave on *.* to 'repl'@192.168.10.36 identified by 'yourpasswd';

刷新权限

mysql> flush privileges;

3.3.4 导出数据库

[root@xuegod5 ~]# mysqldump -uroot -pyourpasswd -B HA>HA2.sql

发送到xuegod6上

3.4 部署slave xuegod6

3.4.1 导入数据

[root@xuegod6 ~]# mysql -uroot -pyourpasswd <HA2.sql

3.4.2 修改配置

[root@xuegod6 ~]# vim /etc/my.cnf

server-id=3

log-bin=mysql-bin-slave2

binlog-format=row

重启服务:

[root@xuegod6 ~]# service mysqld restart

3.4.3指定slave中继作为主

mysql> change master to master_host='192.168.10.35',master_user='repl',master_password='yourpasswd';

mysql> start slave;

3.5 从MASTER上插入数据测试

mysql> create table mermber(id int(4) unsigned not null auto_increment,name varchar(20),primary key(id));

mysql> insert into mermber values(1,'天屠'),(2,'孤叶');

2-16 mysql主从复制的更多相关文章

  1. MySQL主从复制原理及配置详细过程以及主从复制集群自动化部署的实现

    一.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,并重 ...

  2. Mysql主从复制,读写分离(mysql-proxy),双主结构完整构建过程

    下面介绍MySQL主从复制,读写分离,双主结构完整构建过程,不涉及过多理论,只有实验和配置的过程. Mysql主从复制(转载请注明出处,博文地址:) 原理是master将改变记录到二进制日志(bina ...

  3. MySQL主从复制与读写分离

    MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过.但在实际的生产环境中, ...

  4. mysql主从复制的一篇文章(转载)

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

  5. MySQL主从复制与读写分离 --非原创

    原文出处:http://www.cnblogs.com/luckcs/articles/2543607.html MySQL主从复制(Master-Slave)与读写分离(MySQL-Proxy)实践 ...

  6. 分布式架构高可用架构篇_08_MyCat在MySQL主从复制基础上实现读写分离

    参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...

  7. Mysql主从复制的实现

    MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤其是开放源码这一 ...

  8. Mysql主从复制_模式之日志点复制

    MySQL数据复制的原理 MySQL复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新.删除等等).因此,要进行复制,必须在主服务器上启用二进制日志. 每个从服务器从主服务器接收主服务器已经记 ...

  9. centos7下部署mysql主从复制

    首先大致看一下这个图 环境说明: 系统:centos7 IP:master:192.168.7.235 slave:192.168.7.226 mysql版本MySQL-5.7 1.Master 下载 ...

  10. MySQL主从复制介绍

    MySQL主从复制介绍 MySQL数据库的主从复制方案,和使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借助第三方工具,而且,M ...

随机推荐

  1. xml传参

    前端调用后端方法时要传递多个参数,在前端js中拼接xml形式的字符串: var args = "<?xml version='1.0' encoding='utf-8' ?>&q ...

  2. CGI原理解析之二------WEB服务和CGI交互数据

    #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/wait.h ...

  3. php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort)

    php实现把数组排成最小的数(核心是排序)(看别人的代码其实也没那么难)(把php代码也看一下)(implode("",$numbers);)(usort) 一.总结 核心是排序 ...

  4. 【31.58%】【codeforces 719B】 Anatoly and Cockroaches

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  5. C语言学习笔记:12_变量的存储方式和生存期

    /* * 12_变量的存储方式和生存期.c * * Created on: 2015年7月5日 * Author: zhong */ #include <stdio.h> #include ...

  6. Android推送进阶课程学习笔记

    今天在慕课网学习了Android进阶课程推送的server端处理回执的消息 . 这集课程主要介绍了,当server往client推送消息的时候,client须要发送一个回执回来确认收到了推送消息才算一 ...

  7. 【u225】最优分解方案

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 经过第一轮的游戏,不少同学将会获得圣诞特别礼物,但这时细心的数学课代表发现了一个问题: 留下来的人太多 ...

  8. Qt for Automation

    Automation, Automotive, and other industries In addition to improving the generic product offering a ...

  9. BZOJ1297 迷路 - 矩阵的幂

    传送门 题目大意: 输入n(点的数量),t(时间),和一个n*n的矩阵,第i行第j列表示第i个节点到第j个节点有一条matrix[i][j](0~9)时间的边,若为0则没有边,问从1到n恰好经过t时间 ...

  10. Crystal Report - 水晶报表导出文件的格式设置

    水晶报表中自带的导出和打印功能用起来确实很方便,只不过有时候需要导出的文件并不需要那么多种类型,在网上找到一些朋友的代码总结了一下,可以通过代码实现自定义导出文件类型 首先需要定义一个枚举: publ ...