一、背景
服务器资源有限,现需要在同一台服务器上面安装MariaDB和MySQL数据库并且均作为从库去同步同一个MariaDB主库,那么问题就来了同一台Linux服务器上面安装MariaDB和MySQL会有冲突,端口冲突,配置文件路径冲突等,于是就有了这样一个思路,就是原有的MariaDB不动,将MySQL安装在Docker容器中,安装成功之后再来建立主从连接。
二、安装docker
1、给服务器开启外网权限(要下载软件包)
2、移除旧版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
3、安装需要的软件包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
4、添加软件源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
5、更新yum缓存
sudo yum makecache fast
6、安装Docker-ce
sudo yum -y install docker-ce
7、启动Docker后台服务
sudo systemctl start docker
8、加入开机自启动
sudo systemctl enable docker
9、验证是否安装成功
sudo docker version
10、配置镜像加速
vi /etc/docker/deamon.json
//添加如下内容:
{
"registry-mirrors": ["https://2lqq34jg.mirror.aliyuncs.com"]
}
11、常用命令
docker的常用基本命令_docker常用命令_小刘不想敲代码的博客-CSDN博客
三、docker中创建mysql容器
1、搜索镜像
sudo docker search mysql
2、 拉取镜像
这里指定了MySQL的版本号,若想拉取最新的可不用指定版本号,直接使用搜索出来的镜像名即可,这里需要等待几分钟(看网络快慢),拉取镜像需要下载几百兆镜像文件
sudo docker pull mysql:5.7.42
3、创建MySQL容器
sudo docker run -d -p 3307:3306 --name mysql -v /icc/tools/mysql/data:/var/lib/mysql -v /etc/localtime:/etc/localtime -v /icc/tools/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.42
4、参数说明
-d:容器后台运行
-p 3307:3306:宿主机上3307端口对应容器中3306端口,在外部访问时用的是宿主机上的端口
--name mysql:给容器起个名字,方便查找和使用
-v /icc/tools/mysql/data:/var/lib/mysql:将宿主机"/icc/tools/mysql/data"目录挂载到容器的"/var/lib/mysql"目录(具体使用宿主机上哪个目录,自行定义),使得mysql数据文件能在宿主机上进行保存。这一步很重要,如果不挂载的话,一旦容器删除了,那么数据就丢失了!
-v /etc/localtime:/etc/localtime:将宿主机时间挂载到容器中,使容器中时间和宿主机同步
-v /icc/tools/mysql/conf:/etc/mysql/conf.d:将宿主机"/icc/tools/mysql/conf"目录挂载到容器的"/etc/mysql/conf.d"目录,这里是在宿主机上预留了一个配置文件挂在地址,因为这个MySQL是装来做从库的,需要从库配置
-e MYSQL_ROOT_PASSWORD=123456:给root用户设置默认密码为123456
mysql:5.7.42:镜像名
5、需要重新部署容器时,先执行如下步骤
sudo docker stop mysql //关闭容器
sudo docker rm -f mysql //删除容器(这里不用担心数据丢失,因为已经挂在了数据在宿主机上)
然后再重新执行步骤3重新创建容器
四、docker中的mysql服务和外部服务配置主从连接
1、修改MySQL容器中配置文件
cd /icc/tools/mysql/conf #这是MySQL容器挂载到宿主机的配置文件路径
vi my.cnf #创建一个配置文件
#添加如下内容
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
log-bin=mysql-bin # [必须]启用二进制日志
server-id=168 # [必须]服务器唯一ID,默认是1,一般取IP最后一段
#主从数据复制要忽略的表
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=information_schema.%
replicate-wild-ignore-table=performance_schema.%
2、修改了配置文件之后需要重启mysql容器
sudo docker restart mysql
3、重启之后进入容器
sudo docker exec -it demo bash
4、登录mysql服务
mysql -uroot -p123456
5、 配置主从连接
change master to master_host='192.168.0.1',master_user='root',master_password='123456', master_log_file='mysql-bin.000001',master_log_pos=328;
6、启动slave
start slave;