快速搭建MySQL复制集
快速搭建MySQL复制集
主从复制架构

1 环境说明
MySQL版本 5.6
basedir :/u01/my3306 #MySQL软件目录
数据目录 :/u01/mysql/[实例名]/data
日志目录 :/u01/mysql/my3308/log/iblog
binlog日志 :/u01/mysql/my3308/log/binlog
其他 :/u01/mysql/my3308/run
/u01/mysql/my3308/tmp
master端口(已存在) :3306
slaved端口(带创建):3308
2.msater已存在,创建slave(3308)实例
2.1 创建相关目录(MySQL用户)
mkdir -p /u01/mysql/my3308/log/iblog
mkdir -p /u01/mysql/my3308/log/binlog
mkdir -p /u01/mysql/my3308/run
mkdir -p /u01/mysql/my3308/tmp
2.2 创建my.cnf
cp /u01/mysql/my3306/my.cnf /u01/mysql/my3308/my.cnf
vim /u01/mysql/my3308/my.cnf
#替换3306 为3307 并且修改server_id
#修改后的my.cnf:
[mysql@localhost data]$ cat /u01/mysql/my3308/my.cnf
[client]
port=3308
socket=/u01/mysql/my3308/mysql.sock
[mysql]
pid_file=/u01/mysql/my3308/run/mysqld.pid
[mysqld]
autocommit=1
general_log=off
explicit_defaults_for_timestamp=true
# system
basedir=/u01/my3306
datadir=/u01/mysql/my3308/data
max_allowed_packet=1g
max_connections=3000
max_user_connections=2800
open_files_limit=65535
pid_file=/u01/mysql/my3308/run/mysqld.pid
port=3308
server_id=103
skip_name_resolve=ON
socket=/u01/mysql/my3308/run/mysql.sock
tmpdir=/u01/mysql/my3308/tmp
#binlog
log_bin=/u01/mysql/my3308/log/binlog/binlog
binlog_cache_size=32768
binlog_format=row
expire_logs_days=7
log_slave_updates=ON
max_binlog_cache_size=2147483648
max_binlog_size=524288000
sync_binlog=100
#logging
log_error=/u01/mysql/my3308/log/error.log
slow_query_log_file=/u01/mysql/my3308/log/slow.log
log_queries_not_using_indexes=0
slow_query_log=1
log_slave_updates=ON
log_slow_admin_statements=1
long_query_time=1
#relay
relay_log=/u01/mysql/my3308/log/relaylog
relay_log_index=/u01/mysql/my3308/log/relay.index
relay_log_info_file=/u01/mysql/my3308/log/relay-log.info
#slave
slave_load_tmpdir=/u01/mysql/my3308/tmp
slave_skip_errors=OFF
#innodb
innodb_data_home_dir=/u01/mysql/my3308/log/iblog
innodb_log_group_home_dir=/u01/mysql/my3308/log/iblog
innodb_adaptive_flushing=ON
innodb_adaptive_hash_index=ON
innodb_autoinc_lock_mode=1
innodb_buffer_pool_instances=8
#default
innodb_change_buffering=inserts
innodb_checksums=ON
innodb_buffer_pool_size= 128M
innodb_data_file_path=ibdata1:32M;ibdata2:16M:autoextend
innodb_doublewrite=ON
innodb_file_format=Barracuda
innodb_file_per_table=ON
innodb_flush_log_at_trx_commit=1
innodb_flush_method=O_DIRECT
innodb_io_capacity=1000
innodb_lock_wait_timeout=10
innodb_log_buffer_size=67108864
innodb_log_file_size=1048576000
innodb_log_files_in_group=4
innodb_max_dirty_pages_pct=60
innodb_open_files=60000
innodb_purge_threads=1
innodb_read_io_threads=4
innodb_stats_on_metadata=OFF
innodb_support_xa=ON
innodb_use_native_aio=OFF
innodb_write_io_threads=10
[mysqld_safe]
datadir=/u01/mysql/my3308/data
2.3 初始化数据库
/u01/my3306/scripts/mysql_install_db --datadir=/u01/mysql/my3308/data --user=mysql
2.4 启动数据库实例
/u01/my3306/bin/mysqld_safe --defaults-file=/u01/mysql/my3308/my.cnf --user=mysql &
2.5 验证连接
[mysql@localhost data]$ mysql --socket=/u01/mysql/my3308/run/mysql.sock --port 3308
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.36-log Source distribution
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.
3.搭建主从复制
3.1设置提示符 以区别主从
#主库上
mysql> prompt my3306->
PROMPT set to 'my3306->'
my3306->
#从库上
mysql> prompt my3308->
PROMPT set to 'my3308->'
my3308->
3.2创建复制用户(主从上都要执行)
grant replication slave,replication client on *.* to 'rep'@'%' identified by 'rep';
3.3确认主从的server_id
my3306->show variables like 'server_id%';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| server_id | 101 |
| server_id_bits | 32 |
+----------------+-------+
2 rows in set (0.00 sec)
my3308->show variables like 'server_id%';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| server_id | 103 |
| server_id_bits | 32 |
+----------------+-------+
2 rows in set (0.00 sec)
3.4创建需要同步的数据库
create database replTestDB;
use replTestDB;
create table t1(id int,name varchar(10));
insert into t1 values(1,'AAAAA');
commit;
3.5mysqldump全备
[mysql@localhost ~]$ mysqldump --socket=/u01/mysql/my3306/run/mysql.sock --port=3306 --single-transaction --master-data=2 replTestDB >/tmp/replTestDB20170731.sql
[mysql@localhost ~]$ cat /tmp/replTestDB20170731.sql
-- MySQL dump 10.13 Distrib 5.6.36, for Linux (x86_64)
--
-- Host: localhostDatabase: replTestDB
-- ------------------------------------------------------
-- Server version 5.6.36-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
--
-- Position to start replication or point-in-time recovery from
--
-- CHANGE MASTER TO MASTER_LOG_FILE='binlog.000012', MASTER_LOG_POS=96488758;
--
-- Table structure for table `t1`
.........................................................
#备份完毕后,再插入一条数据
my3306-> insert into t1 values(2,'BBBBB');
Query OK, 1 row affected (0.02 sec)
3.6 从库上还原数据
my3308->use replTestDB
Database changed
my3308->source /tmp/replTestDB20170731.sql
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
my3308->show tables;
+----------------------+
| Tables_in_replTestDB |
+----------------------+
| t1 |
+----------------------+
1 row in set (0.00 sec)
3.7 从库上配置主从复制
change master to
master_host='127.0.0.1',
master_port=3306,
master_user='rep',
master_password='rep',
master_log_file='binlog.000012',
master_log_pos=96488758;
my3308->start slave;
Query OK, 0 rows affected (0.02 sec)
4 Semi-sync复制

实现半同步复制的功能很简单,只需在mysql的主服务器和从服务器上安装个google提供的插件即可实现。
安装步骤如下:
cd /u01/mysql-5.6.36/plugin/semisync //插件目录
master上操作:
my3306->install plugin rpl_semi_sync_master SOname 'semisync_master.so'; #安装模块
Query OK, 0 rows affected (0.03 sec)
my3306->SET GLOBAL rpl_semi_sync_master_enabled = 1; # 启动半同步
my3306->set global rpl_semi_sync_master_timeout =2000; # 设置超时时间
my3306->show variables like '%rpl_semi%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 2000 | #单位毫秒
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_no_slave | ON |
+------------------------------------+-------+
4 rows in set (0.00 sec)
slave上操作:
my3308->install plugin rpl_semi_sync_slave SOname 'semisync_slave.so'; #安装模块
Query OK, 0 rows affected (0.03 sec)
my3308->show variables like '%rpl_semi%';
+------------------------------------+-------+
| Variable_name | Value |
+------------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+------------------------------------+-------+
my3306->SET GLOBAL rpl_semi_sync_slave_enabled = 1; # 启动半同步
my3308->STOP SLAVE IO_THREAD; START SLAVE IO_THREAD; #从库上重启进程使其模块生效:
上面的设置时在mysql进程内动态设定了,会立即生效但是重启服务以后就会失效,为了保证永久有效,
需要把相关配置写到主、从服务器的配置文件my.cnf内:
# On Master
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000 #此单位是毫秒
# On Slave
[mysqld]
rpl_semi_sync_slave_enabled=1
确认半同步功能已经启用,通过下面的操作进行查看
master:
my3306->show global status like "rpl%";
+--------------------------------------------+---------+
| Variable_name | Value |
+--------------------------------------------+---------+
| Rpl_semi_sync_master_clients | 1 |
| Rpl_semi_sync_master_net_avg_wait_time | 1017 |
| Rpl_semi_sync_master_net_wait_time | 16276 |
| Rpl_semi_sync_master_net_waits | 16 |
| Rpl_semi_sync_master_no_times | 1 |
| Rpl_semi_sync_master_no_tx | 36298 |
| Rpl_semi_sync_master_status | ON |
| Rpl_semi_sync_master_timefunc_failures | 0 |
| Rpl_semi_sync_master_tx_avg_wait_time | 312835 |
| Rpl_semi_sync_master_tx_wait_time | 5005370 |
| Rpl_semi_sync_master_tx_waits | 16 |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |
| Rpl_semi_sync_master_wait_sessions | 0 |
| Rpl_semi_sync_master_yes_tx | 15 |
+--------------------------------------------+---------+
14 rows in set (0.00 sec)
Rpl_semi_sync_master_clients = 1 表示半同步已经开启
验证一下
** slave 上停止同步:**
my3308->STOP SLAVE IO_THREAD;
Query OK, 0 rows affected (0.01 sec)
** master 上把超时设大一些:**
my3306->set global rpl_semi_sync_master_timeout=60000;
Query OK, 0 rows affected (0.00 sec)
** master 插入一条数据:**
my3306->INSERT into t8 values (4,'eeeee');
Query OK, 1 row affected (58.10 sec)
my3306->INSERT into t8 values (5,'eee');
Query OK, 1 row affected (0.01 sec)
可以看到: 关闭从服务以后,insert数据会出现等待,一直到超时时间过了才能创建
一旦超时,半同步将自动将为异步,可以看到第二个insert语句不再等待了!!
** slave 上启动同步,数据马上就同步了!
快速搭建MySQL复制集的更多相关文章
- Oracle Compute云快速搭建MySQL Keepalived高可用架构
最近有个客户在测试Oracle Compute云,他们的应用需要使用MySQL数据库,由于是企业级应用一定要考虑高可用架构,因此有需求要在Oracle Compute云上搭建MySQL高可用集群.客户 ...
- 基于keepalived搭建MySQL热机集群
背景 MySQL的高可用方案一般有如下几种: keepalived+双主,MHA,MMM,Heartbeat+DRBD,PXC,Galera Cluster 比较常用的是keepalived+双主,M ...
- 怎么使用mysqlreplicate快速搭建MySQL主从呢?
用其中的mysqlreplicate工具来快速搭建MySQL主从环境. HE1:192.168.1.248 slave HE3:192.168.1.250 master 实战 Part1:安装mysq ...
- MongoDB搭建ReplSet复制集群
MongoDB的复制集是一个主从复制模式 又具有故障转移的集群,任何成员都有可能是master,当master挂掉用会很快的重新选举一个节点来充当master. 复制集中的组成主要成员 Primary ...
- Windows搭建MongoDB复制集
上篇,我们已经知道了什么是MongoDB的复制集,不知道的可以查看上篇哦,传送门来了. 光说不练,假把式,咱来自己搭建一个复制集.先下载安装哦,不知道的查看上篇哦,https://blog.csdn ...
- 抄来的,占个位儿【百度架构师是怎样搭建MySQL分布式集群】
1.准备集群搭建环境 使用6台虚拟机来搭建MySQL分布式集群,相应的实验环境与对应的MySQL节点之间的对应关系如下图所示: 管理节点(MGM):这类节点的作用是管理MySQLCluster ...
- 生产环境搭建MySQL复制的教程(转)
[导读] 网络上有很多关于MySQL复制搭建的步骤和范例,以及手册上有一章完整的篇幅,讲述MySQL复制的原理.搭建步骤.优化等,但依然存在很多刚开始学习MySQL知识或者刚进入DBA行业的朋友咨询, ...
- MongoDB:通过mongodump【时间一致性】备份,快速创建secondary复制集节点——更精简的方式2
该方式优点:快速通过mongodump初始化数据库,大大减少新的secondary节点从头开始初始化的风险:网络壅塞.oplog.rs过期.耗时太长等. 还原的关键:一致性mongodump备份 + ...
- MySQL集群---②Windows平台搭建MySQL CLUSTER集群
原文:http://blog.csdn.net/mazhaojuan/article/details/42211857 本文将通过两台电脑来简单介绍一下Windows平台如何搭建MySQL集群. My ...
随机推荐
- 导入网页数据到 Google Sheet
数据没有用,我们需要的是数据所反映出来的东西.增长率,排名,占比等.而这些结果是通过分析数据得到的. 从网上搜集到数据后,导入到表格程序中便可以进行方便地分析处理了.下面介绍将网页中的表格数据导入到 ...
- JVM高级特性-三、垃圾收集之判断对象存活算法
一.概述 运行时数据区中,程序计数器.虚拟机栈.本地方法栈都是随线程而生随线程而灭的 因此,他们的内存分配和回收是确定的,在方法或线程结束时就回收.而Java堆和方 法区则是不确定的,程序运行过程中创 ...
- SICP-2.2-数据的抽象
数据的抽象 生活中有许多的事物具有复合结构,例如地理位置所用的经纬度,便是通过一个复合结构来代表位置,在我们的程序当中,我们设法将经度纬度组合成一对,我们既可以把他们当做一个整体单元来进行操作,而且也 ...
- 把angular项目整合到.net mvc中
之前的开发选择的是完全舍弃服务端,仅保留最简单web服务器提供angular经打包的静态资源,此外所有的业务与数据请求都访问一个分离的WebApi来实现.不过最近碰到一个需求,有必要使用多个客户端,而 ...
- 音乐API之QQ音乐
欢迎大家来到我的博客,这是我在博客园写的第一篇文章,但不会是最后一篇,希望大家多多关注我,支持我哦!正文开始,今天我们要讲的是QQ音乐的API,都是来源于官方的地址,以前我也想写一个,但百度谷歌之后都 ...
- [leetcode-630-Course Schedule III]
There are n different online courses numbered from 1 to n. Each course has some duration(course leng ...
- JavaScript对象属性访问的两种方式
JavaScript对象属性访问的两种方式 object.attribute object["attribute"] 例如: var employees = [ { "f ...
- Vue.js 基础指令实例讲解(各种数据绑定、表单渲染大总结)——新手入门、高手进阶
Vue.js 是一套构建用户界面的渐进式框架.他自身不是一个全能框架--只聚焦于视图层.因此它非常容易学习,非常容易与其它库或已有项目整合.在与相关工具和支持库一起使用时,Vue.js 也能完美地驱动 ...
- kindeditor使用入门-张国红
kindeditor是在线编辑器,比较好用,以下是使用这个插件的步骤. 下载kindeditor-4.1.10.zip 解压 asp,asp.net,php对于jsp开发没有用,可以删除 新建web工 ...
- 把本地git仓库中的项目引入到码云上
一.安装git软件和TortoiseGit客户端(git需配置环境变量,但安装时已经配置好,无需考虑) 二.生成公钥和私钥(建立与码云的连接) 三.在码云上新建项目(建议在组织的基础上) 四.在码 ...