mysql my.cnf back_lo_使用docker镜像建立mysql主从,双主环境

本文详细介绍了如何在Docker环境下搭建MySQL的主从复制和双主复制架构,包括容器的创建、配置文件修改、权限设置、主从同步以及双主之间的连接与复制。同时提到了在生产环境中可能采用的双主多从架构,强调了读写分离和故障切换的重要性。
摘要由CSDN通过智能技术生成

一、准备工作

1.docker安装步骤略

2.拉取网易蜂巢的mysql-server:5.6

docker pull hub.c.163.com/nce2/mysql:5.6

二、搭建主从

1.创建mysql容器 1个master+3个slave

docker run --name mysql-master -d -P hub.c.163.com/nce2/mysql:5.6

docker run --name mysql-slave1 -d -P hub.c.163.com/nce2/mysql:5.6

docker run --name mysql-slave2 -d -P hub.c.163.com/nce2/mysql:5.6

docker run --name mysql-slave3 -d -P hub.c.163.com/nce2/mysql:5.6

2.查看容器

[root@docker ~]# docker ps -a

CONTAINER ID        IMAGE                          COMMAND             CREATED             STATUS              PORTS                     NAMES

429eb0994e3b        hub.c.163.com/nce2/mysql:5.6   "/run.sh"           41 hours ago        Up 41 hours         0.0.0.0:32771->3306/tcp   mysql-slave3

2bc6a8288acf        hub.c.163.com/nce2/mysql:5.6   "/run.sh"           41 hours ago        Up 41 hours         0.0.0.0:32770->3306/tcp   mysql-slave2

c4b203cf3d96        hub.c.163.com/nce2/mysql:5.6   "/run.sh"           41 hours ago        Up 41 hours         0.0.0.0:32769->3306/tcp   mysql-slave1

825af360d400        hub.c.163.com/nce2/mysql:5.6   "/run.sh"           41 hours ago        Up 41 hours         0.0.0.0:32768->3306/tcp   mysql-master

3.进入master容器

这里以进入mysql-master为例

[root@bogon ~]# docker exec -it mysql-master bash

root@825af360d400:~#

4.容器之间的隔离性可自行验证,可以在mysql-master和mysql-slave1建立不同名的database进行验证

5.登录到容器进行如下操作,master,slave都需要这么做

a).查看容器的操作系统环境

uname -a

cat /etc/pro

cat /etc/lsb-release

发现我们的容器是ubuntu14.04

root@825af360d400:~# cat /etc/lsb-release

DISTRIB_ID=Ubuntu

DISTRIB_RELEASE=14.04

DISTRIB_CODENAME=trusty

DISTRIB_DESCRIPTION="Ubuntu 14.04.3 LTS"

b).执行apt-get install时候发现什么也装不了,也没有vi编辑器

追加内容到 /etc/apt/sources.list

echo deb http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse >> /etc/apt/sources.list

echo deb http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse >> /etc/apt/sources.list

echo deb http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse >> /etc/apt/sources.list

echo deb http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse >> /etc/apt/sources.list

echo deb http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse >> /etc/apt/sources.list

echo deb-src http://mirrors.163.com/ubuntu/ trusty main restricted universe multiverse >> /etc/apt/sources.list

echo deb-src http://mirrors.163.com/ubuntu/ trusty-security main restricted universe multiverse >> /etc/apt/sources.list

echo deb-src http://mirrors.163.com/ubuntu/ trusty-updates main restricted universe multiverse >> /etc/apt/sources.list

echo deb-src http://mirrors.163.com/ubuntu/ trusty-proposed main restricted universe multiverse >> /etc/apt/sources.list

echo deb-src http://mirrors.163.com/ubuntu/ trusty-backports main restricted universe multiverse >> /etc/apt/sources.list

c).更新源

apt-get update

apt-get install vim

d).然后通过vi把/etc/apt/sources.list文件的前两行删除掉 再重新update一下。

apt-get update

e).安装一个网络工具获取ip

apt-get install net-tools

f).拷贝mysql的配置文件

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

chmod +x /etc/init.d/mysqld

cp /usr/local/mysql/support-files/my-docker.cnf  /etc/my.cnf

root@825af360d400:~# ifconfig

eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:01

inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0

inet6 addr: fe80::42:acff:fe11:1/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

RX packets:11711 errors:0 dropped:0 overruns:0 frame:0

TX packets:10500 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:30347188 (30.3 MB)  TX bytes:776169 (776.1 KB)

lo        Link encap:Local Loopback

inet addr:127.0.0.1  Mask:255.0.0.0

inet6 addr: ::1/128 Scope:Host

UP LOOPBACK RUNNING  MTU:65536  Metric:1

RX packets:22 errors:0 dropped:0 overruns:0 frame:0

TX packets:22 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:0

RX bytes:2212 (2.2 KB)  TX bytes:2212 (2.2 KB)

h).修改mysql密码,并且赋值权限

mysql -u root

use mysql;

update user set password = password('mysql') where user = 'root';

grant all privileges on *.* to 'root'@'%' identified by 'mysql' with grant option;

flush privileges;

6.配置主从

a).Master

(1)在my.cnf的[mysqld]下面增加下面几行代码

server-id = 1     //给数据库服务的唯一标识,不要重复

log-bin = master-bin

log-bin-index = master-bin.index

(2)重启MySQL服务使配置生效

service mysqld restart

(3)查看日志

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000005 |     2976 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.05 sec)

b).Slave

(1)在my.cnf的[mysqld]下面增加下面几行代码

server-id = 2

relay-log-index = slave-relay-bin.index

relay-log = slave-relay-bin

(2)重启MySQL服务使配置生效

service mysqld restart

(3)连接Master

change master to master_host='172.17.0.1', //Master服务器IP

master_port=3306,

master_user='root',

master_password='mysql',

master_log_file='master-bin.000005',//Master服务器产生的日志

master_log_pos=2976;

(4)启动Slave

start slave;

(5)查看日志

另外两台slave也需要重复上述操作

(6)自行验证主从复制功能

三、搭建双主

1.在my.cnf的[mysqld]下面增加下面几行代码

Master1添加

server-id=1

log-bin=mysqlmaster-bin.log

auto-increment-increment=2

auto-increment-offset=1

Master2添加

server-id=2

log-bin=mysqlmaster-bin.log

auto-increment-increment=2

auto-increment-offset=2

说明:auto-increment-increment的值设为整个结构中服务器的总数,此实验为两台服务器,所以值为2

auto-increment-offset是用来设定数据库中自动增长的起点的,因为服务器都设定了一次自动增长的值为2,所以他们的起点必须得不同,这样才能避免两台服务器数据同步时出现主键冲突

2.重启MySQL服务使配置生效

service mysqld restart

3.添加同步数据所需要的用户

Master1

GRANT REPLICATION SLAVE ON *.* TO 'root'@'172.17.0.%' IDENTIFIED BY 'mysql';

Master2

GRANT REPLICATION SLAVE ON *.* TO 'root'@'172.17.0.%' IDENTIFIED BY 'mysql';

4.查看两台服务器Master状态

Master1

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000006 |      242 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

Master2

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000007 |      121 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

5.互相连接

Master1

change master to master_host='172.17.0.11',master_user='root',master_password='mysql',master_log_file='mysql-bin.000007',master_log_pos=121;

Master2

change master to master_host='172.17.0.10',master_user='root',master_password='mysql',master_log_file='mysql-bin.000006',master_log_pos=242;

6.开启复制功能

Master1和Master2都执行

start slave;

7.查看连接状态

show slave status \G;

查看

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

都显示yes表示启动正常

8.自行验证双主复制功能

备注:一般生产环境双主是互为主备的关系,只要Master1是正常的,Master2不对外提供服务

Master1与Master2之间属于"主-主"复制关系,即自己既是主机,又是对方的从机

通过keepalived来进行failover

四、双主多从架构简介

1.Master(192.168.31.230)为正常运行环境下的主库,为两个Slave(192.168.31.231和192.168.31.232)提供“主-从”复制功能;

2.Master_Backup(192.168.31.233)是Master的备份库,只要Master是正常的,它不对外提供服务。它与Master之间属于"主-主"复制关系,即自己既是主机,又是对方的从机;

3.同理,192.168.31.234和192.168.31.235为Slave_Backup,分别为192.168.31.231和 192.168.31.232的备份库,只要Slave是正常的,对应的备份机不对外提供服务;

4.Slave在此架构中的目的是为了实现读写分离,对应用程序来说,Master只负责写,两个Slave只负责读。Slave的数据来源于Master的复制操作;

5.如果Master由于某种原因(例如:宕机和断电等)导致不能正常运行,则此时需要让Master_Backup自动切换为新主机,而Slave和Slave_Backup也能自动切换数据源到Master_Backup;

6.同理,如果Slave由于某种原因(例如:宕机和断电等)导致不能正常运行,则此时需要让对应的Slave_Backup自动切换为新从机;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值