.说明

此操作文档,如果在master机器已开启bin-log及设定好server-id的情况下,可以不锁表,不停机的实现master-slave同步。这一同步可以将master上已有数据同步到slave中,且如果slave出错,或是新增slave,同样可以参照此文档操作。

此文档基于master版本5.7.24,解压安装,非root帐号运行启停。Slave使用容器运行,镜像地址:harbor.xxxx.com.cn/3rd_part/mysql:5.7.24,运行帐号为非root帐号。

.Mysql Master服务器

一,登陆mysql master服务器

ssh dbqry@master

二,查看my.cnf文件配置

/mysql/my.cnf文件

[client]

port=3306

socket=/mysql/mysql.sock

[mysqld]

port=3306

user=mysql

basedir=/mysql/mysql

datadir=/mysql/data

pid-file=/mysql/mysql.pid

socket=/mysql/mysql.sock

log_error=/mysql/error.log

server-id=100

max_allowed_packet = 500M

max_connections=10000

log-bin=mysql-bin

binlog-format=mixed

character-set-server=utf8

sql_mode=NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

确认此配置已经过重启。(如果不重启,后面的操作都不能继续)

三,使用root登陆mysql,确认已为django用户赋权。

GRANT ALL ON TestDB.* TO ' rep-user '@'%'; 

flush privileges;

四,使用root登陆mysql,重置log-bin文件

【以防意外,先备份!!!】

reset master

五,备份TestDB数据库

mysqldump -u root -p  TestDB --single-transaction --master-data=2 --default-character-set utf8 --no-autocommit>TestDB.sql

增加--single-transaction --master-data=2是为了能准备记录log-bin开始的文件号和偏移量。

六,将这两个文件cp到mysql slave机器。

.Mysql slave服务器

一,前置准备

删除已有的mysql服务,确认slave机器上没有任何mysql服务和数据。

二,新增docker运行所需文件夹

mkdir /docker/mysql-docker

mkdir /docker/mysql-docker/data

mkdir /docker/mysql-docker/conf

mkdir /docker/mysql-docker/log

mkdir /docker/mysql-docker/back

用于存储mysql的数据,配置,日志及备份

三,新增slave的配置文件

/docker/mysql-docker/conf/mysql_prism.cnf

[client]

port = 3306

#socket=/docker/mysql/mysql.sock

[mysqld]

port=3306

default-time_zone = '+8:00'

#user = mysql

#basedir = /docker/mysql/mysql

#datadir = /docker/mysql/data

#pid-file = /docker/mysql/mysql.pid

#socket = /docker/mysql/mysql.sock

log_error = /var/log/mysql/error.log

server-id = 999

relay-log = mysql-relay

# replicate-do-db = TestDB

character-set-server = utf8

max_allowed_packet = 500M

max_connections = 10000

sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

server-id 999大于master上的server-id(100)。

四,新增slave上的docker启动脚本

/docker/mysql-docker/start_mysql.sh

#!/bin/sh

mysql_dir=/docker/mysql-docker

docker run -p 3306:3306

-v "${mysql_dir}/data":/var/lib/mysql

-v "${mysql_dir}/conf":/etc/mysql/conf.d

-v "${mysql_dir}/back":/back

-v "${mysql_dir}/log":/var/log/mysql

--user 1234:1234

--name mysql-slave

-e MYSQL_ROOT_PASSWORD=xxxxxx

-d harbor.xxxx.com.cn/3rd_part/mysql:5.7.24

其中--user 1234:1234对应于宿主机的非root用户和组启动mysql。

之后,登陆进docker,更改mysql的root密码。

docker exec -it mysql-slave mysql -u root –p

五,在slave上新建用户及数据库

CREATE USER 'rep-user'@'%' IDENTIFIED BY 'xxxxxxx';

create database TestDB default character set utf8 collate utf8_general_ci;

GRANT ALL ON TestDB.* TO 'rep-user'@'%'; 
flush privileges; 

六,导入备份的数据库数据

mysql -udjango -p TestDB < /back/ TestDB.sql
 

七,获取TestDB.sql文件里的bin-log编号和位移

head -n 30 TestDB.sql
输出类似如下:
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=154;

八,写入需要同步的master地址等信息

change master to

master_host='master_ip',

master_user='rep-user',

master_password='xxxxxx',

master_log_file='mysql-bin.000003',

master_log_pos=154;

上面的master_log_file和master_log_pos对应于前一步骤的数据。

九,启动主从同步

start slave

十,查看同步状态及排错,验证

1,查看同步状态命令

show slave status\G,

2,排错

查看日志及stop slave或reset slave

3,验证

create table demo(

id INT NOT NULL AUTO_INCREMENT,

name VARCHAR(100) NOT NULL,

PRIMARY KEY ( id )

);

insert into demo (name) values ('cheng');

详细点的Mysql主从同步的更多相关文章

  1. mysql主从同步(3)-percona-toolkit工具(数据一致性监测、延迟监控)使用梳理

    转自:http://www.cnblogs.com/kevingrace/p/6261091.html 在mysql工作中接触最多的就是mysql replication mysql在复制方面还是会有 ...

  2. mysql主从同步(2)-问题梳理

    之前详细介绍了Mysql主从复制的原理和部署过程,在mysql同步过程中会出现很多问题,导致数据同步异常.以下梳理了几种主从同步中可能存在的问题:1)slave运行过慢不能与master同步,也就是M ...

  3. 【实操笔记】MySQL主从同步功能实现

    写在前边: 这两天来了个需求,配置部署两台服务器的MySQL数据同步,折腾了两天查了很多相关资料,一直连不上,后来发现其实是数据库授权的ip有问题,我们用的服务器是机房中的虚拟机加上反向代理出来的,坑 ...

  4. MySQL主从同步那点事儿

    一.前言 关于mysql主从同步,相信大家都不陌生,随着系统应用访问量逐渐增大,单台数据库读写访问压力也随之增大,当读写访问达到一定瓶颈时,将数据库的读写效率骤然下降,甚至不可用;为了解决此类问题,通 ...

  5. Mysql主从同步的实现原理与配置实战

    1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover ...

  6. mysql主从同步问题梳理

    前言: MySQL主从复制故障机延迟原因有很多,之前详细介绍了Mysql主从复制的原理和部署过程,在mysql同步过程中会出现很多问题,导致数据同步异常.以下梳理了几种主从同步中可能存在的问题: 1) ...

  7. zabbix利用percona-toolkit工具监控Mysql主从同步状态

    一.下载percona-toolkit工具包 percona-toolkit是一组高级命令行工具的集合,可以查看当前服务的摘要信息,磁盘检测,分析慢查询日志,查找重复索引,实现表同步等等. [root ...

  8. zabbix3.0.4监控mysql主从同步

    zabbix3.0.4监控mysql主从同步 1.监控mysql主从同步原理: 执行一个命令 mysql -u zabbix -pzabbix -e 'show slave status\G' 我们在 ...

  9. MySQL主从同步几个文件

    MySQL主从同步:   M锁表 M导出S导入 M解锁 M建同步帐号 S获取点位:产生master.info S开启同步   3306: mysql-bin.0000x mysql-bin.index ...

随机推荐

  1. 【Docker学习之二】Docker部署安装

    环境 docker-ce-19.03.1-3.el7.x86_64 一.Docker的部署安装 Docker采用Linux(内核)技术,所以只能运行在Linux上,官方说Linux kernel至少3 ...

  2. 前端传实体数组;后台list实体接收参数

    前端页面: $.ajax({ url: url, data: JSON.stringify(data), dataType: "json", contentType: " ...

  3. 【更新】Java发送邮件:个人邮箱(QQ & 网易163)+企业邮箱+Android

    这次把两种情况仔细说一下,因为好多人问啦. 第一种:企业邮箱 这里在这一篇已经说的很清楚了,这次不过是建立个maven工程,引入了最新的javamail依赖,代码优化了一下.直接上代码 pom < ...

  4. Navicat 创建oracle表空间、新建用户、授权

    1.利用数据库管理员账号:SYSTEM,再配合数据库管理口令,连接Oracle数据库. 登录界面: 2.创建表空间文件 进入如下界面 进入如下界面 弹出如下界面,输入表空间名称 最终结果:  2 .新 ...

  5. golang执行命令行(一)

    golang中会经常遇到要 fork 子进程的需求.go 标准库为我们封装了 os/exec标准包,当我们要运行外部命令时应该优先使用这个库. 执行 command 这里我简单结合context 和 ...

  6. 九校联考-DL24凉心模拟Day2总结

    T1 锻造 forging 题目描述 "欢迎啊,老朋友." 一阵寒暄过后,厂长带他们参观了厂子四周,并给他们讲锻造的流程. "我们这里的武器分成若干的等级,等级越高武器就 ...

  7. sql server 压缩日志文件

    USE [master] GO ALTER DATABASE TestDB SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE TestDB SET ...

  8. .Net Core WebApi(3)—NLog

    在.Net Core中,微软提供的内置的日志组件没有实现将日志记录到文件.数据库上.这里使用NLog替代内置的日志组件 1.在项目中引入NuGet包   NLog         NLog.Web.A ...

  9. python预习day1

    计算机基础 cpu 大脑 内存 临时记忆 硬盘 永久记忆 输入设备 眼睛 耳朵 输出设备 嘴巴 操作系统 控制计算机硬件工作流程的 应用程序 安装在操作系统之上的软件 python简介 python是 ...

  10. 换个语言学一下 Golang (7)——使用函数

    什么是函数 函数,简单来讲就是一段将输入数据转换为输出数据的公用代码块.当然有的时候函数的返回值为空,那么就是说输出数据为空.而真正的处理过程在函数内部已经完成了. 想一想我们为什么需要函数,最直接的 ...