当前位置: 首页 > news >正文

mysql ab复制延时_MySQL AB复制详述

实验所需主机:

master:vm1 172.25.254.1

slave1:vm2 172.25.254.2

slave2:vm3 172.25.254.3

在三台主机上分别安装MySQL-server

yum install -y mysql-server

1.master端的配置

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

[mysqld]下面加入

log-bin=mysql-bin              #启动二进制日志系统

server-id=1            #必须为 1 到 232–1 之间的一个正整数值

binlog-do-db=westos            #二进制需要同步的数据库名,如果需要同步多个库,例如要再同步                        test库,再添加一行“binlog-do-db=test”,以此类推

binlog-ignore-db=mysql          #禁止同步 mysql 数据库

启动master端数据库

[root@vm1 ~]# /etc/init.d/mysqld start

给数据库授权,让172.25.254.网段的主机以用户westos,密码westos来访问数据库

mysql> grant replication slave, reload,super on *.* to westos@'172.25.254.%' identified by 'westos';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql> show master status;

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

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000003 |      348 | westos      | mysql            |

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

1 row in set (0.00 sec)

记录 File 和 Position 的值,下面会用到

2.slave1(vm2)配置

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

[mysqld]加入

server-id=2

启动slave1数据库

[root@vm2 ~]# /etc/init.d/mysqld start

在数据库中做如下操作

mysql> change master to master_host='172.25.254.1', master_user='westos', master_password='westos', master_log_file='mysql-bin.000003', master_log_pos=348;

Query OK, 0 rows affected (0.57 sec)

###master_log_file 为master端数据库的二进制文件(可以在master端 cd /var/lib/mysql mysqlbinlog mysql-bin.000003 进行查看) master_log_pos 为数据库要同步的点

mysql> slave start;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

...

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如果都是 yes,表示从库的 I/O,Slave_SQL 线程都正确开启.表明数据库开始同步

注意:在同步之前确保 master 与 slave 上的数据一致性。

3.测试

在master端进行操作,查看slave1(vm2)端数据库是否同步

master(vm1)端

mysql> create database westos;

Query OK, 1 row affected (0.00 sec)

mysql> use westos

Database changed

mysql> create table users (

-> username varchar (15) not null,

-> password varchar (25) not null

-> );

Query OK, 0 rows affected (0.24 sec)

mysql> insert into users values ('user1','123');

Query OK, 1 row affected (0.00 sec)

mysql> insert into users values ('user2','456');

Query OK, 1 row affected (0.00 sec)

mysql> select * from users;

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

| username | password |

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

| user1    | 123      |

| user2    | 456      |

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

2 rows in set (0.00 sec)

slave1(vm2)端

mysql> show databases;

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

| Database          |

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

| information_schema |

| mysql              |

| test              |

| westos            |

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

4 rows in set (0.00 sec)

mysql> use westos

Reading table information for completion of table and column names

You can turn off this feature to get a quicker startup with -A

Database changed

mysql> select * from users;

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

| username | password |

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

| user1    | 123      |

| user2    | 456      |

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

2 rows in set (0.00 sec)

如果写操作较少,而读操作很多时,可以采取这种结构,一个做master,其他的做slave。可以将读操作分布到其它的 slave,从而减小master 的压力。但是,当 slave 增加到一定数量时,slave 对 master 的负载以及网络带宽都会成为一个严重的问题。这种结构虽然简单,但是,它却非常灵活,足够满足大多数应用需求。

4.当设置 log_slave_updates 时,你可以让 slave 扮演其它 slave 的 master。此时,slave 把 SQL 线程执行的事件写进行自己的二进制日志(binary log),然后,其它的 slave 可以获取这些事件并执行它,从而有效缓解master 的压力。其配置方法如下:

添加slave2(vm3)

1)由于 master 上已经有数据,而新加的 slave2 没有,必须在配置复制前同步数据。

同步数据有两种方法:

第一种:

在 master 上执行以下命令:

[root@vm1 ~]# mysqldump westos > westos.bak

[root@vm1 ~]# scp westos.bak 172.25.254.3:

在slave2(vm3)

[root@vm3 ~]# /etc/init.d/mysqld start

[root@vm3 ~]# mysqladmin create westos        #创建westos库

[root@vm3 ~]# mysql westos < westos.bak

第二种:

master(vm1)

[root@vm1 ~]# cd /var/lib/mysql/

[root@vm1 mysql]# scp mysql-bin.000003 172.25.254.3:

slave2(vm3)

[root@vm3 ~]# /etc/init.d/mysqld start

[root@vm3 ~]# mysqlbinlog mysql-bin.000003

...

# at 4

#150718  9:31:36 server id 1  end_log_pos 106    Start: binlog v 4, server v 5.1.71-log created 150718  9:31:36 at startup

...

# at 690

#150718 10:18:40 server id 1  end_log_pos 795    Query    thread_id=2    exec_time=0    error_code=0

SET TIMESTAMP=1437185920/*!*/;

insert into users values ('user2','456')

...

记录需要同步的开始与结尾时间

[root@vm3 ~]# mysqlbinlog --start-datetime="2015-07-18 9:31:36" --stop-datetime="2015-07-18 10:18:41" mysql-bin.000003  ##输入的结束时间比二进制文件中的结束时间稍大

[root@vm3 ~]# mysqlbinlog mysql-bin.000003 |mysql

2)在 slave1(vm2) 上加入以下设置

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

...

server-id=2

log-bin=mysql-bin

binlog-do-db=westos

binlog-ignore-db=mysql

log-slave-updates

...

[root@vm2 ~]# /etc/init.d/mysqld restart

mysql> grant replication slave,reload,super on *.* to westos@'172.25.254.%' identified by 'wesstos';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql> show master status;

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

| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| mysql-bin.000001 |      348 | westos      | mysql            |

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

1 row in set (0.00 sec)

3).在slave2(vm3)

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

...

server-id=3

[root@vm3 ~]# /etc/init.d/mysqld restart

mysql> change master to master_host='172.25.254.2', master_user='westos',

master_password='westos',master_log_file='mysql-bin.000001',master_log_pos=348;

mysql> slave start;

mysql> show slave status\G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

在master端对数据库操作,测试

0b1331709591d260c1c78e86d0c51c18.png

相关文章:

  • Java将MySQL数据写入json_Java实现将json中的数值插入到mysql中
  • mysql部署模型_proxysql-单主模型MGR部署
  • python 报表打印预览_python学习笔记之wxpython打印预览
  • python动态规划算法最大k乘积_动态规划最大K乘积问题
  • python实现语音播放失败_PyAudio alsa错误消息
  • python更新pip管理员权限_PIP升级权限被拒绝Windows 10
  • redis监听mysql数据库数据_天兔监控服务器和mysql,redis等监控
  • 第二部分 Mysql数据库管理_第二篇 数据库MySql
  • mysql 从库基于主库binlog恢复_MySQL利用binlog来恢复数据库
  • python可迭代对象相关的内建函数_第八章 Python可迭代对象、迭代器和生成器
  • mysql workbench连接jsp_JSP连接sql server2000数据库
  • 爱可生 mysql监控_数据库Prometheus 数据采集3-爱可生
  • java分割_Java中分割字符串的两种方法实例详解
  • java https 证书_JavaHTTPS客户端证书认证
  • java byte to hex_java 转换byte位hex字符串的工具代码
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 【翻译】Mashape是如何管理15000个API和微服务的(三)
  • 【刷算法】从上往下打印二叉树
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • dva中组件的懒加载
  • Java Agent 学习笔记
  • Java-详解HashMap
  • java中的hashCode
  • linux安装openssl、swoole等扩展的具体步骤
  • Lsb图片隐写
  • Mysql5.6主从复制
  • React-Native - 收藏集 - 掘金
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Vue全家桶实现一个Web App
  • vue学习系列(二)vue-cli
  • 从零搭建Koa2 Server
  • 基于web的全景—— Pannellum小试
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 问题之ssh中Host key verification failed的解决
  • 小李飞刀:SQL题目刷起来!
  • 一个6年java程序员的工作感悟,写给还在迷茫的你
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​Java并发新构件之Exchanger
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (07)Hive——窗口函数详解
  • (1) caustics\
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (LeetCode) T14. Longest Common Prefix
  • (pt可视化)利用torch的make_grid进行张量可视化
  • (pytorch进阶之路)扩散概率模型
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot优课在线教学系统 毕业设计 081251