MySQL 复制详解及简单实例
作者:lqh 发布时间:2024-01-15 12:50:28
标签:MySQL,复制
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 : <a target="_blank" href="http://blog.csdn.net/leshamipid-file" rel="external nofollow" >http://blog.csdn.net/leshami
pid-file</a> = /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 |
+----------+
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/leshami/article/details/41643013
0
投稿
猜你喜欢
- 一、概念介绍本质上,webpack 是一个现代JavaScript 应用程序的静态模块打包器(module bundler)。当 webpa
- 方法1:1.安装requests_toolbelt依赖库#代码实现def upload(self): login_
- **问题描述:**有如下程序输出日志,计算程序运行时间,显示花费623分钟?start time:2019-03-15 19:45:31.2
- php的命名空间功能已经出来很久了,但是一直以来没怎么深究过,这次赶着有时间所以特意翻着手册做一个整理和总结帮助自己完善完善,原本准备一篇写
- 本文实例讲述了Python实现的读写json文件功能。分享给大家供大家参考,具体如下:相比java,python对json文件的处理就简单很
- 过年GUI博客二连发,本打算出去玩玩,奈何空气,天气实在差,遂使用tkinter开发一款GUI刷屏器,写此博客记录一下我的开发思路。一.准备
- 本文实例为大家分享了pygame实现移动底座弹球的具体代码,供大家参考,具体内容如下输出结果:实现代码:# -*- coding: utf-
- 1、保存整个网络结构信息和模型参数信息:torch.save(model_object, './model.pth')直接加
- 代码如下:'================================================== '函数名:
- 这段时间微信跳一跳这个游戏非常火爆,但是上分又非常的难,对于程序员来说第一个念头就是通过写一个辅助脚本 * 让上分变的容易,python现在比
- 一、85%的广告没人看解读:如何挤进那15%的成功广告中去,吸引了读者就是成功了一半。Quester视角:反过来讲,只有不到1/5的广告能吸
- by cpglkg <script>var arr=[5,10,15];function rect(arr,width){&nb
- 一、form介绍我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。与此同
- 前言:record类型,这是一种新引用类型,而不是类或结构。record与类不同,区别在于record类型使用基于值的相等性。例如:publ
- 有的时候,我们本来写得好好的爬虫代码,之前还运行得Ok, 一下子突然报错了。报错信息如下:Http 800 Internal interne
- Turtle图形库Turtle 库是 Python 内置的图形化模块,属于标准库之一,位于 Python 安装目录的 lib 文件夹下,常用
- facebook的信息架构设计,是目前为止互联网上我见过的最合理的信息架构。每次培训,我基本都需要拿20分钟左右的时间来解析它,包括老的、新
- 1、主题毫无疑问Pycharm是一个具有强大快捷键系统的IDE,这就意味着你在Pycharm中的任何操作,例如打开一个文件、切换编辑区域等,
- 写在前面 最近和几个小伙伴们在写字节跳动第五届青训营后端组的大作业。虽然昨天已经提交了项目,但有很多地方值得总结一下,比如这一篇,
- 字符串字符串在Python中是基本数据类型,是一个不可变的字符序列。字符串驻留机制仅保存一份相同且不可变字符串的方法,不同的值被存放在字符串