MySQL 复制详解及简单实例

主从复制技术在MySQL中被广泛使用,主要用于同步一台服务器上的数据至多台从服务器,可以用于实现负载均衡,高可用和故障切换,以及提供备份等等。MySQL支持多种不同的复制技术,诸如单向,半同步异步复制等以及不同级别的复制,诸如数据库级别,表级,跨库同步等等。本文简要描述了一个基本的主从复制并给出示例。

1、复制的基本原理(步骤)

a、在主库上把数据更改记录的二进制日志(binary log)

b、从库上的I/O线程连接到主库并请求发送其二进制日志文件(主库上的binlog dump线程将二进制日志内容发送到从库)

c、从库上的I/O线程读取主服务发送的二进制内容并将其拷贝到中继日志

d、从库上的SQL线程读取中继日志并执行日志中包含的更新

2、为配置文件添加复制项

# 本文的演示基于同一服务器上的多实例环境,其中3406端口用作主库,而3506用作从库。

# 关于多实例的部署可参考:

# MySQL多实例配置(一) http://blog.csdn.net/leshami/article/details/40339167

# MySQL多实例配置(二) http://blog.csdn.net/leshami/article/details/40339295

# 3406与3506为都为新装且含缺省库等,所以本文演示中未涉及先迁移主库数据到备库步骤

a、主库上的配置文件

# more my3406.cnf

[mysqld]

socket = /tmp/mysql3406.sock

port = 3406

pid-file = /data/inst3406/data3406/my3406.pid

user = mysql

log-error=/data/inst3406/data3406/inst3406.err

datadir=/data/inst3406/data3406

basedir=/app/soft/mysql5

#### for master items ####

server-id=3406

log_bin=/data/inst3406/log/bin/inst3406bin

innodb_flush_log_at_trx_commit=1

sync_binlog=1

b、从库上的配置文件

# more my3506.cnf

[mysqld]

socket = /tmp/mysql3506.sock # Author : Leshami

port = 3506 # Blog : http://blog.csdn.net/leshami

pid-file = /data/inst3506/data3506/my3506.pid

user = mysql

log-error=/data/inst3506/data3506/inst3506.err

datadir=/data/inst3506/data3506

basedir=/app/soft/mysql5

#### for slave items ####

server-id=3506

relay_log=/data/inst3506/log/relay/relay-bin

read_only=1

3、创建复制账号

#启动端口为3406的实例并添加账户

[mysql@app ~]$ mysqld_safe --defaults-file=/data/inst3406/data3406/my3406.cnf &

[mysql@app ~]$ mysql -P3406 #登陆到3406

master@localhost[(none)]> show variables like 'server_id';

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

| Variable_name | Value |

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

| server_id | 3406 |

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

#创建用于复制的账户

master@localhost[(none)]> grant replication slave,replication client on *.*

-> to repl@'192.168.1.177' identified by 'repl';

#初始化主库日志文件,生成环境慎用reset

master@localhost[(none)]> reset master;

Query OK, 0 rows affected (0.01 sec)

#查看主库的状态,日志初始化至000001,

master@localhost[(none)]> show master status,Position为120

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| inst3406bin.000001 | 120 | | | |

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

4、配置主从同步

#启动端口为3506的实例

[mysql@app ~]$ mysqld_safe --defaults-file=/data/inst3506/data3506/my3506.cnf &

[mysql@app ~]$ msyql -P3506

slave@localhost[(none)]> show variables like 'server_id';

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

| Variable_name | Value |

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

| server_id | 3506 |

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

1 row in set (0.00 sec)

#为从库添加指向主库的相关配置信息,该命令会生成及修改备库上的master.info及relay-log.info文件

slave@localhost[(none)]> CHANGE MASTER TO MASTER_HOST='192.168.1.177',

-> MASTER_USER='repl',

-> MASTER_PASSWORD='repl',

-> MASTER_PORT=3406,

-> MASTER_LOG_FILE='inst3406bin.000001',

-> MASTER_LOG_POS=0;

Query OK, 0 rows affected, 2 warnings (0.04 sec)

#出现了2个warnings,查看一下

slave@localhost[(none)]> show warnings \G

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

Level: Note

Code: 1759

Message: Sending passwords in plain text without SSL/TLS is extremely insecure.

*************************** 2. row ***************************

Level: Note

Code: 1760

Message: Storing MySQL user name or password information in the master.info repository is not secure and is therefore not recommended.

Please see the MySQL Manual for more about this issue and possible alternatives.

2 rows in set (0.00 sec)

#此时查看从库的状态信息

slave@localhost[(none)]> show slave status \G

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

Slave_IO_State:

Master_Host: 192.168.1.177

Master_User: repl

Master_Port: 3406

Connect_Retry: 60

Master_Log_File: inst3406bin.000001

Read_Master_Log_Pos: 4

Relay_Log_File: relay-bin.000001

Relay_Log_Pos: 4

Relay_Master_Log_File: inst3406bin.000001

Slave_IO_Running: No #IO线程没有运行

Slave_SQL_Running: No #SQL线程没有运行

......................

Master_Info_File: /data/inst3506/data3506/master.info

slave@localhost[(none)]> start slave; #启动slave

Query OK, 0 rows affected (0.01 sec)

#含义如下

START SLAVE with no thread_type options starts both of the slave threads. The I/O thread reads

events from the master server and stores them in the relay log. The SQL thread reads events from the

relay log and executes them.

#再次查看slave的状态

robin@localhost[(none)]> show slave status\G

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

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.1.177

Master_User: repl

Master_Port: 3406

Connect_Retry: 60

Master_Log_File: inst3406bin.000001

Read_Master_Log_Pos: 120

Relay_Log_File: relay-bin.000002

Relay_Log_Pos: 285

Relay_Master_Log_File: inst3406bin.000001

Slave_IO_Running: Yes #IO线程处于运行状态

Slave_SQL_Running: Yes #SQL线程处于运行状态

..............

Exec_Master_Log_Pos: 120

Relay_Log_Space: 452

............

Master_Server_Id: 3406

Master_UUID: 32f53a0a-63ef-11e4-93d9-8c89a5d108ae

Master_Info_File: /data/inst3506/data3506/master.info

SQL_Delay: 0

SQL_Remaining_Delay: NULL

Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it #重要的提示信息

#可以看到从库上的2个线程,一个是用于I/O线程,用于连接到主库请求主库发送binlog,一个是用于执行SQL的SQL线程。

slave@localhost[(none)]> show processlist\G

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

Id: 4

User: system user

Host:

db: NULL

Command: Connect

Time: 510993

State: Waiting for master to send event

Info: NULL

*************************** 2. row ***************************

Id: 5

User: system user

Host:

db: NULL

Command: Connect

Time: 333943

State: Slave has read all relay log; waiting for the slave I/O thread to update it

Info: NULL

5、验证同步情况

#下面在主库上执行一些操作以检查从库的同步情况

master@localhost[(none)]> show variables like 'server_id';

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

| Variable_name | Value |

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

| server_id | 3406 |

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

1 row in set (0.00 sec)

#主库上Binlog Dump线程用于发送binlog日志文件到从库,如下查询

master@localhost[(none)]> show processlist\G

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

Id: 12

User: repl

Host: 192.168.1.177:57440

db: NULL

Command: Binlog Dump

Time: 511342

State: Master has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

#主库创建数据库及表

master@localhost[(none)]> create database tempdb;

Query OK, 1 row affected (0.01 sec)

master@localhost[(none)]> use tempdb

Database changed

master@localhost[tempdb]> create table tb_engines as select * from information_schema.engines;

Query OK, 9 rows affected (0.02 sec)

Records: 9 Duplicates: 0 Warnings: 0

#下面是在从库上检查的结果

slave@localhost[(none)]> select count(*) from tempdb.tb_engines;

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

| count(*) |

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

| 9 |

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

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

本文标题: MySQL 复制详解及简单实例

本文地址: http://www.cppcns.com/shujuku/mysql/188663.html

mysql 实例复制_MySQL 复制详解及简单实例相关推荐

  1. mysql 实例复制_MYSQL教程MySQL 复制详解及简单实例

    <MysqL教程MysqL 复制详解及简单实例>要点: 本文介绍了MysqL教程MysqL 复制详解及简单实例,希望对您有用.如果有疑问,可以联系我们. MysqL 复制详解及简单实例 主 ...

  2. java对文件的操作详解_Java 对 Properties 文件的操作详解及简单实例

    Java 对 Properties 文件的操作详解及简单实例 发布于 2020-8-7| 复制链接 摘记: Java 对 Properties 文件的操作简介在 Java 中,我们常用 java.ut ...

  3. php小程序地图处理,微信小程序 地图map详解及简单实例

    微信小程序 地图map 微信小程序map 地图属性名类型默认值说明longitudeNumber中心经度 latitudeNumber中心纬度 scaleNumber1缩放级别 markersArra ...

  4. python与golang_Golang与python线程详解及简单实例

    Golang与python线程详解及简单实例 在GO中,开启15个线程,每个线程把全局变量遍历增加100000次,因此预测结果是 15*100000=1500000. var sum int var ...

  5. java method 注解_JAVA 注解详解及简单实例

    JAVA 注解详解及简单实例 何为注解 注解(Annotation)又称为元数据,在JDK1.5后引入,它的作用是: 生成文档  这是注解的原始用途,可以通过注解生成JavaDoc文档 跟踪代码的依赖 ...

  6. java file 实例_Java File类的详解及简单实例

    Java File类的详解及简单实例 1. File():构造函数,一般是依据文件所在的指定位置来创建文件对象. CanWrite():返回文件是否可写. CanRead():返回文件是否可读. Co ...

  7. mysql 流复制_MySQL系列详解六:MySQL主从复制/半同步演示-技术流ken

    前言 随着技术的发展,在实际的生产环境中,由单台MySQL数据库服务器不能满足实际的需求.此时数据库集群就很好的解决了这个问题了.采用MySQL分布式集群,能够搭建一个高并发.负载均衡的集群服务器.在 ...

  8. mysql配置文件说明_mysql配置文件详解说明

    mysql配置文件http://www.doczj.com/doc/ef8ad6026c175f0e7cd1371f.htmlf详解说明 MySQL配置文件http://www.doczj.com/d ...

  9. mysql 主从复制讲解_MySQL主从复制详解

    前言: 在MySQL中,主从架构应该是最基础.最常用的一种架构了.后续的读写分离.多活高可用架构等大多都依赖于主从复制.主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多, ...

最新文章

  1. AlphaZero登上《科学》封面:一个算法“通杀”三大棋,完整论文首次发布
  2. python语言怎么用-Python语言应用解析,如何入门学Python?
  3. Java was started but returned exit code=13
  4. getpass 模块
  5. 电中在线计算机应用基础二考试题目及答案,最新电大2015计算机应用基础作业2 答案.doc...
  6. Silverlight 里如何实现隐式样式,ImplicitStyleManager 的实现思想
  7. IPFS下载安装和配置
  8. 语义信息增强的激光雷达SLAM
  9. python生成安装程序_python生成安装文件 msi
  10. iso qemu 安装ubuntu_qemu 安装 ubuntu-server 虚拟机
  11. 想多了!亚马逊中国没有离开 | 畅言
  12. 关于页面 reflow 和 repaint
  13. 【TSP】基于matlab GUI改进的遗传算法求解旅行商问题【含Matlab源码 926期】
  14. android 毫秒值转换时分秒],毫秒数转换成天时分秒、时分秒
  15. *****DOS·FOR·语句·学习·指南*****
  16. 编译linux搭建vs2015,使用Vs2015开发linux(centos7)程序
  17. 解决顺序表实现队列的假溢出的循环队列
  18. 表白神器——Python画丘比特之箭穿心
  19. 【转】How-To-Ask-Questions-The-Smart-Way
  20. 奇妙的 CSS MASK

热门文章

  1. 人与人之间关系的随想
  2. [Ajax] 超于json2.js的版本json3.js
  3. css sprite原理优缺点及使用
  4. rabbitmq 消息长度_Spring Boot教程(29) – RabbitMQ必备基础
  5. 6-9 统计个位数字 (15 分)
  6. 胎压监测 (10 分)
  7. 4014-基于邻接表的长度为k的简单路径的求解(C++,附思路)
  8. 安徽医科大学计算机考研,这所985院校将现场面试!安徽医科大学缺额超800人!调剂信息更新...
  9. html5单击修改背景色,用获取节点的方式实现点击按钮改变标签背景颜色的问题...
  10. 五年php面试题,找工作的你不容错过的45个PHP面试题附答案(下篇)