1,环境
在linux环境上搭建
2,版本
docker
mysql:
wget https://dev.mysql.com/get/downloads/mysql-5.7.22-1.el7.i686.rpm-bundle.tar
3,安装mysql
cd /usr/local安装路径
wget https://dev.mysql.com/get/downloads/mysql-5.7.22-1.el7.i686.rpm-bundle.tar
tar -zxvf mysql-5.7.22-1.el7.i686.rpm-bundle.tar
4,安装docker
docker的安装使用:
1. 安装docker
# yum install -y docker
2. 启动docker
# systemctl start docker
3. 安装docker镜像
# docker pull [docker镜像地址]
使用阿里云镜像
修改/etc/docker/daemon.json
{
"registry-mirrors": ["https://uulfe4bd.mirror.aliyuncs.com"]
}
4. 修改完毕重启docker
https://dev.aliyun.com/search.html 查询镜像文件。
# systemctl restart docker
5,获取docker镜像
mysql安装需要建立在centos基础上所有在,docker中需要安装docker
# docker pull https://registry.cn-hangzhou.aliyuncs.com/moensun/centos7
查看创建的centos7镜像 docker images记录ID 3db94df3e006
6,创建docker容器
# docker run -tid 3db94df3e006(查看centos7镜像 时可以看到) /usr/sbin/init
重命名容器名称
docker rename priceless_poitras mysql-master1
重新查看docker ps -a 容器名称修改完成
由于是做主从复制,那么应该创建两个容器mysql-master1 和mysql-slave2这里在创建mysql-slave2容器
(由于之前创建了mysql-slave1,这次就创建了mysql-slave2,名称自己命名都行。这次只是想写个博客,方便以后学习,也方便想学习的同学,一主mysql-master1,一从mysql-slave2,后面搭建好的话,就可以根据自己需求搭建主主,多主多从了)
7,MySQL文件拷贝
Docker文件拷贝(容器<=>docker)
# docker cp 原路径 docker容器路径(系统=》docker)
# docker cp MySQL-server-5.6.38-1.el7.x86_64.rpm mysql_master2:/root/
# docker cp docker容器路径 原路径(docker=》系统)
将之前mysql解压后的文件分别拷贝到mysql-master1和mysql-slave2
docker cp mysql-community-common-5.7.22-1.el7.x86_64.rpm mysql-master1:/root/
docker cp mysql-community-client-5.7.22-1.el7.x86_64.rpm mysql-master1:/root/
docker cp mysql-community-libs-5.7.22-1.el7.x86_64.rpm mysql-master1:/root/
docker cp mysql-community-server-5.7.22-1.el7.x86_64.rpm mysql-master1:/root/
docker cp mysql-community-server-5.7.22-1.el7.x86_64.rpm mysql-slave2:/root/
docker cp mysql-community-client-5.7.22-1.el7.x86_64.rpm mysql-slave2:/root/
docker cp mysql-community-libs-5.7.22-1.el7.x86_64.rpm mysql-slave2:/root/
docker cp mysql-community-common-5.7.22-1.el7.x86_64.rpm mysql-slave2:/root/
8,进入容器
# docker exec -it 容器名称 /bin/bash
# docker exec -it mysql_master1 /bin/bash
开启两个远程登录窗口,分别进去主容器和从容器
主,docker exec -it mysql_master1 /bin/bash
从,docker exec -it mysql_slave2/bin/bash
9,MySQL主从复制
cd 到根目录
ll查看复制的mysql的rpm
安装mysql,安装mysql需要安装mysql依赖
(1)安装centos系统安装mysql依赖:
1. perl perl-Module-Build
2. autoconf
3. libaio
4. namuctl-libs
5. net-tools
yum install -y perl perl-Module-Build net-tools autoconf libaio numactl-libs
安装mysql
(2)在根目录下
rpm -ivh mysql-community-*.rpm
启动mysql
systemctl start mysqld
我的一般都会报错 看日志是磁盘没有分配大小
需要vi /etc/my.cnf中添加innodb_buffer_pool_size = 8M
如果没有报错最好
第一次启动后会有个初始化的过程,会产生root账户的随机密码。
cat /var/log/mysqld.log | grep password
连接mysql
mysql -uroot -pkzl\(kVo-w0lg
其中(需要转义
设置重新设置密码
注意:如果只想设置简单密码需要修改两个全局参数:
mysql> set global validate_password_length=1;set global validate_password_policy=0;
set password = password(‘你的密码’)
set password = password(‘123456’)
远程登陆授权
mysql> grant all privileges on *.* to 'root'@'%' identified by '123456' with grant option;
mysql> flush privileges;
主从复制过程
(在主机上操作):
vi /etc/my.cnf
配置文件my.cnf
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
#无论主机还是从机server-id不能相同
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
1. 创建同步复制的用户
mysql> create user 'repl'@'172.17.0.%' identified by '123456';
2. 给同步复制用户赋权
mysql> grant replication slave on *.* to 'repl'@'172.17.0.%' identified by '123456';
mysql> flush privileges;
3. 开启binlog
配置时候注意几个坑:
Replication-do-db的坑,如果多个库则使用多行Replication-do-db进行配置
Replication-ignore-db的坑,如果忽略多个库则使用多行Replication-ignore-db进行配置
4. 重启mysql
#systemctl restart mysqld
5. 连接mysql
show master status \G;
从机操作:
vi /etc/my.cnf
配置文件my.cnf
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysqld]
#无论主机还是从机server-id不能相同
server-id = 20
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操作:
1. Stop slave;
主从复制的最关键语句:
2. Change master to
Master_host=’172.17.0.2’,
Master_user=’repl’,
Master_password=’123456’,
Master_log_file=’mysql-bin.000001’,
Master_log_pos=120;
3. Start slave;
4.show slave status \G;
测试
主mysql:create database db1;
从 mysql> show databases;
从mysql上创建了db1