mysql主从搭建

一:docker安装和配置

1.下载安装docker
yum install -y docker
2.启动docker
# systemctl start docker //centos7及以后版本
# service docker start //centos6及之前的版本
3.添加docker加速器地址

vi /etc/docker/daemon.json  

{
  "registry-mirrors": ["https://3wkgvv6t.mirror.aliyuncs.com"]
}

自己的加速器地址去https://cr.console.aliyun.com/#/accelerator获取
4.下载centos镜像
docker pull registry.cn-hangzhou.aliyuncs.com/moensun/centos7
镜像可以通过docker search docker查看,docker pull后面的地址可以去https://dev.aliyun.com/list查找
5.利用镜像创建容器,镜像ID通过docker images查看

docker run -tid 镜像ID /bin/bash     //非centos7
docker run -tid 镜像ID /usr/sbin/init  //centos7版本。

6.更改容器名称
docker rename oldName newName
7.docker中创建两个容器(通过同一个镜像创建即可)
为了演示方便,我的两个容器名称为mysql_master和mysql_slave

启动的两个容器

二:两个容器中分别安装mysql

1.首先下载三个包

https://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-server-5.6.38-1.el7.x86_64.rpm
https://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-client-5.6.38-1.el7.x86_64.rpm
https://dev.mysql.com/get/Downloads/MySQL-5.6/MySQL-devel-5.6.38-1.el7.x86_64.rpm

2.把上面3个包分别复制到两个容器中

docker cp MySQL-server-5.6.38-1.el7.x86_64.rpm mysql_master1:/root/
docker cp MySQL-client-5.6.38-1.el7.x86_64.rpm mysql_master1:/root/
docker cp MySQL-devel-5.6.38-1.el7.x86_64.rpm mysql_master1:/root/
docker cp MySQL-server-5.6.38-1.el7.x86_64.rpm mysql_slave1:/root/
docker cp MySQL-client-5.6.38-1.el7.x86_64.rpm mysql_slave2:/root/
docker cp MySQL-devel-5.6.38-1.el7.x86_64.rpm mysql_slave3:/root/

3.进入到容器中
docker exec -it mysql_slave1 /bin/bash
4.安装mysql依赖包(两个容器都要安装)
yum install -y perl perl-Module-Build net-tools autoconf libaio numactl-libs
5.在两个容器中分别安装上面的三个包

rpm -ivh MySQL-server-5.6.38-1.el7.x86_64.rpm  (!!!这一步会生成随机密码,一定要观察打印的日志!)
rpm -ivh MySQL-client-5.6.38-1.el7.x86_64.rpm
rpm -ivh MySQL-devel-5.6.38-1.el7.x86_64.rpm

注意:如果上面安装MySQL-server-5.6.38-1.el7.x86_64.rpm的时候报错说file /usr/share/mysql/charsets/cp850.xml from install of MySQL-server-5.6.38-1.el7.x86_64 conflicts with file from package mariadb-libs-1:5.5.56-2.el7.x86_64,那么就先查一下npm -qa | grep mariadb 然后强制删掉rpm -e mariadb-libs-5.5.44-2.el7.centos.x86_64 --nodeps,然后重新执行以上操作即可
6.启动mysql并进入

# systemctl start mysql
# mysql -uroot -p密码  (这里的密码是在第五步生成的)

7.修改mysql密码
因为mysql安装的时候是随机密码,所以登录到mysql之后要我们自己设置密码
mysql> set password = password(‘你的密码’)
8.mysql远程登录授权,并刷新权限(到这里就可以用Navicat Premium等工具连接了)

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

注意把****换成你自己的mysql中root账户的密码

三:开始mysql主从配置

主从复制的原理图

其大概原理就是主节点中的DDL和DML操作会写到Binlog中,从节点有IO线程定时的从Binlog中拉取,然后写入到从节点中的Relay-log(中继日志)中,然后在自己的mysql内部实现DDL和DML

在主节点上操作

1.创建同步复制的用户
mysql> create user 'yang'@'172.17.0.%' identified by 'yang0328';
2.给同步复制用户赋权

mysql> grant replication slave on *.* to 'yang'@'172.17.0.%' identified by 'yang0328';
mysql> flush privileges;

3.开启binlog(这一步是主节点和从节点都要做的
修改/etc/my.cnf,加入下面的代码,如果没有就自己创建:vi /etc/my.cnf

[mysqld]
server-id                    = 2
port                        = 3306
datadir                      = /var/lib/mysql
socket                       = /var/lib/mysql/mysql.sock
default-storage-engine          = InnoDB
log-bin                      = mysql-bin
log-bin-index                 = mysql-bin.index
relay-log                    = mysql-relay
relay-log-index               = mysql-relay.index
expire-logs-days              = 10
max-binlog-size              = 100M
max_binlog_cache_size        = 8M
log-slave-updates             = 1
binlog_cache_size            = 4M

# use MIXED binlog
binlog_format               = MIXED
#binlog_format              = ROW

#replicate-do-db             = db%.%
#replicate-ignore-db          = mysql.%

# ignore tables
replicate-wild-ignore-table     = mysql.%
sync_binlog                 = 1
relay_log_recovery           = 1
log_slave_updates           = 1
skip-name-resolve
sql_mode=STRICT_TRANS_TABLES
[mysqldump]
quick
max_allowed_packet = 32M

注意server-id = 2这一句在主节点和从节点中务必数值不同,如果相同肯定会报错!!!
我主节点设置的2,从节点设置的3,但是并非固定的,只要不同就行。
其他配置的解释自行百度。

4.重启mysql
#sysctemctl restart mysql

在从节点上操作

1.首先关闭从
mysql> stop slave
2.主从复制的最关键语句:

mysql> Change master to Master_host=’172.17.0.2’, 
  Master_user=’yang’, 
  Master_password=’yang0328’,
  Master_log_file=’mysql-bin.000012’,
  Master_log_pos=120;

这里的Master_log_file和Master_log_pos的值是决定成败的关键点,你需要到主节点用root登录mysql,下图中1就是Master_log_file,2就是Master_log_pos


查看Master_log_file和Master_log_pos的值
上面的两条指令:
mysql> flush logs;
mysql> show master status \G;
  1. Start slave;
终于要结束了

到这里主从复制就搭建完毕了,下面来测试一下
执行show slave status \G

测试是否成功

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342