docker实现MySQL主从复制(小白向)

docker实现MySQL主从复制(小白向)

1.服务器上安装docker

具体可见黑马程序员的教程

简单说说的话,如下

yum install -y docker

启动docker的方法://centos7及以后版本

systemctl start docker 

2.拉取centos镜像

拉取centos镜像

docker pull registry.cn-hangzhou.aliyuncs.com/moensun/centos7

查看docker已有镜像的方法:

docker images

3.有了镜像后 创建docker容器

示例代码

格式:docker run -d --name[容器名字] [–privileged=true] -p [宿主机端口号]:[容器某应用的端口号] [镜像id] /usr/sbin/init

docker run -d --name master  --privileged=true 3db94df3e006  /usr/sbin/init

–privileged=true/usr/sbin/init的作用:是让docker有更多的权限,避免启动MySQL的命令失败,如systemctl命令

尤其注意的是,最好在docker run 的时候 就绑定端口,实现端口映射,否则后期要改端口很麻烦

如果迫不得已要改端口,可以参考如下链接,后文也会给出一个可行的解决办法。

(289条消息) 教你如何修改运行中的docker容器的端口映射的三种方式_七月的小尾巴的博客-CSDN博客_docker修改端口映射

4.查看容器列表

可以通过如下命令查看所有容器的名称等信息

docker ps -a

如果不小心装错的镜像或者容器,可以采用如下命令删除

删除镜像

docker rmi 镜像ID

如果要强行删除,可以用如下命令

docker rmi -f 镜像ID

删除容器

docker rm 容器名称

如果要强行删除,可以用如下命令

docker rm -f 容器名称

5.进入、退出、重启容器和docker的方法

进入容器的方法

docker exec -it 容器名称 /bin/bash

进入容器后,会发现 左侧变成了root@容器id

在这里插入图片描述

退出容器的方法

exit

重启容器的方法:

docker restart 容器ID

停止容器的方法:

docker stop 容器ID

停止docker的方法:

systemctl stop docker

重启docker的方法:

systemctl restart docker

6.在docker的两个容器中分别安装mysql 5.7

执行如下命令 按顺序

yum -y install wget
wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-community-server

遇到询问的地方,直接输入y即可

7.搭建MySQL主从复制

首先,注意要分别进入到两个容器中去,

以进入到一个容器后为例,

启动MySQL

systemctl start mysqld

获取MySQL初始root密码

grep 'temporary password' /var/log/mysqld.log

使用该密码登录MySQL 5.7

mysql -uroot -p[root密码]

设置登录密码和远程访问收授权

mysql>set global validate_password_policy=0;
mysql>set global validate_password_length =1;	#前两步都是为了降低密码校验安全度
mysql>set password for'root'@'localhost' =password('123456'); #设置root密码为123456
mysql>grant all privileges on *.* to root@'%'identified by '123456'; #远程访问授权
mysql>flush privileges; #刷新配置

修改MySQL的配置文件my.cnf,两个容器的MySQL配置文件都要改

vim  /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

注意:建议主mysql的server-id=1 ,从MySQL的server-id=2

server-id 这个千万不能跟别的mysql的配置一样,无论主机还是从机server-id不能相同

主要server-id = 2和log-bin = mysql-bin,一定要配置,其它的可以没有

8.查看容器的ip

在容器中输入

ifconfig

9.配置主机

登录主机的MySQL

mysql -uroot -p123456 #MySQL -uroot -p[root密码]

登录后的操作,

主从复制过程(在主机上操作):
1.	创建同步复制的用户lzf
    mysql> create user 'lzf'@'172.17.0.%' identified by 'root';#172.17.0.这块要学会改成																	自己的内网ip地址
2.	给同步复制用户lzf赋权
    mysql> grant replication slave on *.* to 'lzf'@'172.17.0.%' identified by 'root';
mysql> flush privileges;
3.	开启binlog
    配置时候注意几个坑:
    Replication-do-db的坑,如果多个库则使用多行Replication-do-db进行配置
Replication-ignore-db的坑,如果忽略多个库则使用多行Replication-ignore-db进行配置
4.	重启mysql
#systemctl restart mysql
查看主库的状态
mysql> SHOW MASTER STATUS
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      619 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
#记住:File是二进制日志文件名,Position 是日志开始的位置。后面从库会用到

10.配置从机

注意,登录了从机的MySQL再进行下列操作

从机操作
1. Stop slave;
主从复制的最关键语句:
2. Change master to
         Master_host=’172.17.0.3’,	//主机的IP地址
         Master_user=’lzf’,
         Master_password=’root’,
         Master_log_file=’mysql-bin.000001’,
         Master_log_pos=120;
3. Start slave;

如果出现以下错误

Slave is not configured or failed to initialize properly

说明 MySQL的配置文件my.cnf存在问题,建议用上文的

查看从机状态

show slave status\G;

正常的结果应该如下所示

在这里插入图片描述

11.测试是否成功

在主机上创建一个数据库

create database lzf;

在主机和从机上,查看数据库集

show databases;

如果看到两边的数据库集发生了同步,那么意味着成功实现了主从复制。

12.番外 navicat远程连接docker上的MySQL

在这里插入图片描述

连接名字随便

主机是自己的ip地址,如果是服务器就是公网地址

端口号 是对应容器绑定的宿主机的端口号,如上图所示,是充当从机的容器的3306端口号绑定的宿主机的9027

用户名和密码是数据库root用户的

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值