mysql在线搭建从库,搭建MySQL主从库

脚本详情

使用docker-compose安装MySQL主从库,文件架构如下:

457501bdf8d7

image

docker-compose.yml文件

version: '3'

services:

mysql-master:

container_name: mysql-master

hostname: mysql-master

image: "mysql:5.6"

ports:

- "33060:3306"

volumes:

- /usr/local/mysql-master/etc:/etc/mysql

- /usr/local/mysql-master/var/lib:/var/lib/mysql

- ./master/etc/my.cnf:/etc/my.cnf

- ./master/init_db/:/docker-entrypoint-initdb.d/

environment:

- TZ=Asia/Shanghai

- MYSQL_ROOT_PASSWORD=123456

command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

restart: always

mysql-slave:

container_name: mysql-slave

hostname: mysql-slave

image: "mysql:5.6"

ports:

- "33070:3306"

volumes:

- /usr/local/mysql-slave/etc:/etc/mysql

- /usr/local/mysql-slave/var/lib:/var/lib/mysql

- ./slave/etc/my.cnf:/etc/my.cnf

- ./slave/init_db/:/docker-entrypoint-initdb.d/

environment:

- TZ=Asia/Shanghai

- MYSQL_ROOT_PASSWORD=123456

command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

restart: always

Master

2.1 配置文件(/etc/my.cnf)

#my.conf

[mysqld]

server_id = 1

# 开启GTID模式

gtid-mode = ON

enforce-gtid-consistency = 1

# 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)

binlog-ignore-db = mysql

# 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)

log-bin = mysql-bin

# 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存

binlog_cache_size = 1M

# 主从复制的格式(mixed,statement,row,默认格式是statement)

binlog_format = mixed

# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。

expire_logs_days = 7

# 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。

# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致

slave_skip_errors = 1062

# log_slave_updates表示slave将复制事件写进自己的二进制日志

log_slave_updates = ON

2.2 初始化脚本(init_db/init.sql)

create user 'repl'@'%' identified by 'repl';

grant replication client,replication slave on *.* to 'repl'@'%';

Slave

3.1 配置文件(/etc/my.cnf)

#my.conf

[mysqld]

server_id = 2

gtid-mode = ON

enforce-gtid-consistency = 1

binlog-ignore-db = mysql

log-bin = mysql-slave1-bin

binlog_cache_size = 1M

binlog_format = mixed

expire_logs_days = 7

slave_skip_errors = 1062

relay_log = mysql-relay-bin

log_slave_updates = ON

read_only = 1

3.2 初始化脚本(init_db/init.sql)

reset master;

select sleep(10); ## 第一次出现了mysql-slave先初始化好的情况

CHANGE MASTER TO MASTER_HOST='mysql-master',MASTER_USER='repl',MASTER_PASSWORD='repl',MASTER_PORT=3306,MASTER_AUTO_POSITION=1;

start slave;

安装方法

在mysql路径下,执行命令行,即可完成安装。

docker-compose up -d

验证方法

查看容器是否正常启动。

docker ps -a

457501bdf8d7

image

进入主库所对应的容器。

docker exec -ti /bin/bash

进入数据库,

mysql -u root -p 123456

并新建数据库和表,插入测试数据。

create test;

use test;

create table t(id int,k int);

insert into t values(1,1),(2,3);

进入从库所对应的容器进行查看,进入数据库后,查询表。

use t;

select * from t;

457501bdf8d7

image

如果看到如图所示数据,则主从库安装成功。

或者看到如下信息,也代表主从库配置成功。

457501bdf8d7

image

添加从库只读用户

为保证从库只从主库同步,现设置从库的只读用户。

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

GRANT SELECT ON dp_dorado.* TO 'slave'@'%';

FLUSH PRIVILEGES;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值