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. ExtJS中store.findExact

    var ds = myGrid.apf_ds; var store = myGrid.getStore(); forEach(data, function (item) { if (store.fin ...

  2. [React Unit Testing] React unit testing demo

    import React from 'react' const Release = React.createClass({ render() { const { title, artist, outO ...

  3. [React] Render Basic SVG Components in React

    React loves svg just as much as it loves html. In this lesson we cover how simple it is to make SVG ...

  4. asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二)

    原文:asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二) 续上一篇文章:asp.net core2.0 部署centos7/linux系统 -- ...

  5. erlang 游戏服务器开发

    http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发  erlang大牛写的游戏服务器值得参考 介绍本文以 ...

  6. jar命令+7z:创建,替换,修改,删除Jar, war, ear包中的文件

    虽然现在已经有各种智能的IDE可以为我们生成jar包,war包,ear包,甚至带上了自动替换,部署的功能.但一定会有那么些时候,你需要修改或是替换jar包,war包,ear包中的某个文件而不是整个重新 ...

  7. lipo: can't open input file

    错误1: /Volumes/Mac OS/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/u ...

  8. 【p094】道路游戏

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 小新正在玩一个简单的电脑游戏. 游戏中有一条环形马路,马路上有n个机器人工厂,两个相邻机器人工厂之间由 ...

  9. hibernate annotation 相关主键生成策略

    Hibernate 默认的全面支持 13 物种生成策略 : 1. increment 2.  identity 3. sequence 4. hilo 5. seqhilo 6. uuid 7. uu ...

  10. unix shell(壳)的简单实现

    用户程序通过调用操作系统提供的系统调用(system call)API 来获得操作系统提供的各种服务.但使用 API 需要手动编写程序.对于不编程序.且需要与操作系统进行交互的用户,又如何使用操作系统 ...