欢迎光临
我们一直在努力

详细点的Mysql主从同步

本站教程收集整理的这篇文章主要介绍了详细点的Mysql主从同步,本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

.说明

此操作文档,如果在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

@H_421_2@max_allowed_packet = 500M

@H_421_2@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数据库

@H_462_12@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运行所需文件夹

@H_462_12@mkdir /docker/MysqL-docker

@H_462_12@mkdir /docker/MysqL-docker/data

@H_462_12@mkdir /docker/MysqL-docker/conf

@H_462_12@mkdir /docker/MysqL-docker/log

@H_462_12@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

@H_421_2@max_allowed_packet = 500M

@H_421_2@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

?

@H_421_2@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 vps云服务器 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; 

?

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

@H_462_12@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

@H_462_12@master_host=’master_ip’,

@H_462_12@master_user=’rep-user’,

@H_462_12@master_password=’xxxxxx’,

@H_462_12@master_log_file=’MysqL-bin.000003′,

@H_462_12@master_log_pos=154;

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

?

九,启动主从同步

start slave

?

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

1,查看同步状态命令

show slave status\G,

?

2,排错

查看日志及stop slave或reset slave

3,验证

@R_197_2102@ demo(

?? id int nOT NULL AUTO_INCREMENT,

?? name varchar(100) NOT NULL,

?? PRIMARY KEY ( id )

);

insert into demo (Name) values (‘cheng’);

?

本站总结

以上是本站教程为你收集整理的详细点的Mysql主从同步全部内容,希望文章能够帮你解决详细点的Mysql主从同步所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。