MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广泛用在各种对MySQL有更高性能,更高可靠性要求的场合。与之对应的另一个技术是同步的MySQL Cluster,但因为比较复杂,使用者较少。

下图是MySQL官方给出了使用Replication的场景:

Replication原理

Mysql 的 Replication  是一个异步的复制过程,从一个MySQL节点(称之为Master)复制到另一个MySQL节点(称之Slave)。在 Master 与 Slave  之间的实现整个复制过程主要由三个线程来完成,其中两个线程(SQL 线程和 I/O 线程)在 Slave 端,另外一个线程(I/O 线程)在  Master 端。

要实现 MySQL 的 Replication ,首先必须打开 Master 端的 Binary Log,因为整个复制过程实际上就是 Slave 从 Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。

看上去MySQL的Replication原理非常简单,总结一下:

* 每个从仅可以设置一个主。

* 主在执行sql之后,记录二进制log文件(bin-log)。

* 从连接主,并从主获取binlog,存于本地relay-log,并从上次记住的位置起执行sql,一旦遇到错误则停止同步。

从这几条Replication原理来看,可以有这些推论:

* 主从间的数据库不是实时同步,就算网络连接正常,也存在瞬间,主从数据不一致。

* 如果主从的网络断开,从会在网络正常后,批量同步。

* 如果对从进行修改数据,那么很可能从在执行主的bin-log时出现错误而停止同步,这个是很危险的操作。所以一般情况下,非常小心的修改从上的数据。

* 一个衍生的配置是双主,互为主从配置,只要双方的修改不冲突,可以工作良好。

* 如果需要多主的话,可以用环形配置,这样任意一个节点的修改都可以同步到所有节点。

主从设置

1. MySQL主从应用场景

原理是master上数据更新时会记录一个bin-log,slave会实时同步该bin-log然后slave根据bin-log的sql语句进行相应的操作。

MySQL主从可以实时备份,保证数据高安全性

可以应用在读写分离的场景中,用以降低单台MySQL服务器的I/O

可以实现MySQL服务的HA集群

可以是1主多从,也可以是相互主从(主主)

2. 安装、配置MySQL

参考之前步骤搭建MySQL服务

3. 配置主从准备工作

在主上创建测试库:

建立测试用数据库|表

#myslq –u root –p

mysql>create database ocean;

mysql>use ocean;

mysql>create table test1(id int,sname char(8));

mysql>insert into test1 values(1,’zhangsang’);

4. 配置主(master)

vim ./my.cnf   #修改或添加:

server-id=1

log-bin=mysql-bin

两个可选参数(2选1):

binlog-do-db=ocean        #需要同步的库【多个库之间用,分隔】

binlog-ignore-db=ocean    #忽略不同步的库

修改配置文件后,重启mysql

pid=`ps uax |grep mysql.sock |grep -v grep |awk '{print $2}'` ; kill $pid; cd /usr/local/mysql_2/bin/; ./mysqld_safe --defaults-file=../my.cnf --user=mysql &

Master 授权给Slave

grant replication slave on *.* to 'ocean'@'192.168.9.10' identified by 'ocean';

flush tables with read lock;  #锁住表,防止数据写入,slave配置完成后记得解锁

flush privileges;             #刷新

show master status;           #一定要记住前两列的内容,一会会用到

mysql> show master status;

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

| File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin-log.000028 |      330 | mysql        |                  |

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

1 row in set (0.00 sec)

5. 设置从(slave)

vim my.cnf  #修改或增加

server-id = 2 #这个数值不能和主一样

可选参数:

replicate-do-db=ocean,ocean2 和 replicate-ignore-db=ocean,ocean2 #意义同主的那两个可选参数

service mysqld restart

拷贝主的db1库数据到从:

然后导出主的mysql库数据然后导入给slave mysql

mysqldump -uroot -p mysql > ocean.sql

在salve 中将数据导入到新创建的数据库中

mysql -uroot -p -e "create database ocean"; mysql -uroot -p  ocean < ocean.sql

mysql -uroot -p  #登陆Slave的mysql

slave stop;

change master to master_host='192.168.9.9', master_port=3306 ,master_user='ocean',

master_password='ocean', master_log_file='mysql-bin-log.000028', master_log_pos=330;

slave start;

Master上: mysql -uroot -p -e "unlock tables"

Slave查看从的状态:mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.9.9

Master_User: ocean

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin-log.000028

Read_Master_Log_Pos: 330

Relay_Log_File: mysqld-relay-bin.000002

Relay_Log_Pos: 255

Relay_Master_Log_File: mysql-bin-log.000028

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB: ocean

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

.....

6. 测试主从

在Master中ocean数据库中插入一条记录:

mysql>use ocean;

mysql>insert into test1 values(2,'lisi');

在slave中查看oceanDB是否有新纪录生成。

建议: MySQL主从机制比较脆弱,谨慎操作。如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slave start.

mysql中的replication_Mysql之replication初探相关推荐

  1. mysql中的replication_mysql中replication的相关问题总结

    首先,要使用mysql中的replication,则需要配置master的my.cnf. 例如: 复制代码 代码示例: server-id = 1 log_bin =mysql-bin #log_bi ...

  2. mysql中日志的特点_mysqlbinlog的日志类型

    一.mysqlbinlog简介 binlog又叫二进制日志文件,它会将mysql中所有修改数据库数据的Query以二进制的形式记录到日志文件中,如:create,insert,drop,update等 ...

  3. mysql 5.7 缺点_MySQL · 特性分析 · MySQL 5.7 外部XA Replication实现及缺陷分析

    MySQL 5.7 外部XA Replication实现及缺陷分析 MySQL 5.7增强了分布式事务的支持,解决了之前客户端退出或者服务器关闭后prepared的事务回滚和服务器宕机后binlog丢 ...

  4. MySQL 中的 FOUND_ROWS() 与 ROW_COUNT() 函数

    原文地址:https://www.cnblogs.com/digdeep/p/4818660.html 移植sql server 的存储过程到mysql中,遇到了sql server中的: IF @@ ...

  5. mysql中以下正确的sql是_总结MySQL中SQL语法的使用

    --where子句操作符: where子句操作符 = 等于 <> 不等于(标准语法) != 不等于(非标准语法,可移植性差) < 小于 <= 小于等于 > 大于 > ...

  6. MySQL 5.5主从复制(Replication)

    简介 MySQL的主从复制(Replication),可以保持两台MySQL数据库的内容一致.因为其同步过程是异步的,所以备份数据库上做任何操作,都不会影响主数据库的性能.对游戏后台数据库而言,这是一 ...

  7. mysql中shift h_MySQL复制技术对比与容器化探究

    MySQL和MariaDB 我们都知道,MariaDB是MySQL的一个分支,那么他们之间的区别在哪呢? MariaDB和Mysql的主要区别:MariaDB有12个新的存储引擎,而MySQL有较少的 ...

  8. 如何在MySQL中设置主从复制

    原作者:Etel Sverdlov 转载&翻译:https://www.digitalocean.com/community/tutorials/how-to-set-up-master-sl ...

  9. mysql中的found_MySQL 中的 FOUND_ROWS() 与 ROW_COUNT() 函数

    移植sql server 的存储过程到mysql中,遇到了sql server中的: IF @@ROWCOUNT < 1 对应到mysql中可以使用 FOUND_ROWS() 函数来替换. 1. ...

最新文章

  1. Python:通过一个小案例深入理解IO多路复用
  2. 链表问题13——删除无序单链表中值重复出现的节点(方法二)
  3. spring cloud微服务分布式云架构 - Spring Cloud集成项目简介
  4. W - Pasha and Phone CodeForces - 595B (收益颇丰的数学题
  5. OSS.Social微信项目标准库介绍
  6. 移动站应该尝试百度MIP的五个原因
  7. 牺牲阳极计算机安装标准储罐,钢质储罐阴极保护牺牲阳极保护方法与设计安装...
  8. iOS开发之保存照片到自己创建的相簿
  9. 二维数组,字符串,字符数组
  10. [转]使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(三)-- Logger
  11. 体验vSphere 6之2-vCenter 6
  12. 用matlab产生正弦信号并采样,正弦信号的采样与恢复..doc
  13. Linux和Windows双系统gpt,Windows+Ubuntu双系统GPTMBR引导设置
  14. 点击链接跳转到微信公众号关注页、微信关注链接
  15. android接口的作用是什么意思,Android开发中接口的用处
  16. 钉钉一行代码_利用Python快速搭建钉钉和邮件数据推送系统
  17. VMware配置虚拟机映射,实现局域网络互相访问
  18. Hadoop集群分布式安装
  19. 【Lesson 13】万能和弦和弦走向
  20. 推荐几个浪尖收藏的大数据学习平台

热门文章

  1. python学习笔记-结构化
  2. 致青春——爆一下各自的青春糗事,比比最无节操!
  3. toFixed() 方法
  4. 计算机音乐火影,【史上最全的火影BGM(背景音乐)】
  5. Android闹钟动画,Android实现闹钟小程序
  6. 服务器固态硬盘120g多少钱,120G固态硬盘实际容量多大? 120G固态硬盘实际大小...
  7. 直流无刷电机开环调速基于STM32F302R8+X-NUCLEO-IHM07M1(一)
  8. C#开发串口调试助手实现modbusRTU通信
  9. 高价低频、重口碑的医美行业,如何做私域流量闭环?
  10. 【iMessage群发苹果推】 Product证书—>Product推送证书—>Product证书打包的程序对应的devicetoken—>Product推送