docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql-master/log:/var/log/mysql \
-v /mydata/mysql-master/data:/var/lib/mysql \
-v /mydata/mysql-master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
这段代码是用于在 Docker 中启动一个名为 mysql-master 的 MySQL 5.7 数据库容器的命令,并将其映射到主机的 3307 端口。具体参数含义如下:
docker run
: Docker 命令,用于创建并启动 Docker 容器。-p 3307:3306
: 将 Docker 容器的 3306 端口映射到主机的 3307 端口。--name mysql-master
: 为 Docker 容器指定一个名称。-v /mydata/mysql-master/log:/var/log/mysql
: 将主机上的目录 /mydata/mysql-master/log 挂载到 Docker 容器的 /var/log/mysql 目录,用于容器中数据库日志文件的存放。-v /mydata/mysql-master/data:/var/lib/mysql
: 将主机上的目录 /mydata/mysql-master/data 挂载到 Docker 容器的 /var/lib/mysql 目录,用于容器中数据库文件的存放。-v /mydata/mysql-master/conf:/etc/mysql
: 将主机上的目录 /mydata/mysql-master/conf 挂载到 Docker 容器的 /etc/mysql 目录,用于容器中 MySQL 配置文件的存放。-d mysql:5.7
: 使用 Docker Hub 中的 mysql:5.7 镜像创建容器,并以后台方式运行。综合上述参数,该命令会创建一个名为 mysql-master 的 MySQL 5.7 数据库容器,并将其映射到主机的 3307 端口,同时将容器中数据库的日志文件、数据文件和配置文件挂载到主机上指定的目录。容器中的 MySQL 数据库的 root 用户密码将被设置为 ROOT。该命令在后台运行,并返回容器的 ID。
cd /mydata/mysql-master/conf
vim my.cnf
[mysqld]
##同一局域网中需要唯一
server_id=101
##指定不需要同步的数据库每个in成
binlogn-ignore-db=mysql
##开启二进制日志功能
log_bin=mall-mysql-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed
##二进制过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或之慈宁宫类型的错误,避免slave端复制中断
##如:1062错误是指一些主键重复,1032是指因为主从数据库数据不一致
slave_skip_errors=1062
docker restart mysql_master
docker exec -it mysql_master /bin/bash
mysql-uroot-proot
mysql
:启动 MySQL 客户端程序。-uroot
:指定连接的用户名为 root。-proot
:指定连接的密码为 root。CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.*TO 'slave'@'%';
这是两个 MySQL 数据库命令用于创建一个名为 ‘slave’ 的用户,并授予该用户复制从库和复制客户端的权限。具体命令含义如下:
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
CREATE USER
: 创建一个新用户。'slave'@'%'
: 用户名和允许连接的主机。在这里,用户名为 ‘slave’,‘%’ 表示允许从任何主机连接。IDENTIFIED BY '123456'
: 设置用户的密码为 ‘123456’。GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
GRANT
: 授予权限给指定用户。REPLICATION SLAVE, REPLICATION CLIENT
: 授予复制从库和复制客户端的权限。*.*
: 要授权的数据库和表。在这里,*.*
表示所有数据库和表。TO 'slave'@'%'
: 授予权限的用户和允许连接的主机。综合上述命令,第一个命令创建了一个名为 ‘slave’ 的用户,并设置其密码为 ‘123456’,允许从任何主机连接。第二个命令给该用户授予了复制从库和复制客户端的权限,并对所有数据库和表进行授权。这样,用户 ‘slave’ 就可以作为一个复制从库连接到 MySQL 主服务器,并进行数据复制操作。
docker run -p 3308:3306 --name mysql_slave \
-v /mydata/mysql_slave/log:/var/log/mysql \
-v /mydata/mysql-slave/data:/var/lib/mysql \
-v /mydata/mysql-slave/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
cd /mydata/mysql-slave/conf
vim my.cnf
[mysqld]
##设置server_id,同一局域网需要唯一
server_id=102
##指定不需要同步的数据库名称
binlog-ignore-db=mysql
##开启二进制日志功能,以备slave作为其他数据库实例的master时使用
log-bin=mall-mysql-slave1-bin
##设置二进制日志使用内存大小(事务)
binlog_cache_size=1M
##设置使用的二进制日志模式(mixed,statement,row)
binlog_format=mixed
##二进制日志过期清理时间。默认值为0,表示不自动清理
expire_logs_days=7
##跳过主从复制中遇到的所有错误或制动类型的错误,避免slave端复制中断
##如:1062错误是指一下主键重复,1032错误是因为主从数据不一致
slave_skip_errors=1062
##relay_log配置中继日志
relay_log=mall-mysql-relay-bin
##log_slave_updates表示slave将表示复制事件写进自己的二进制日志
log_slave_updates=1
##slave设置为只读(具有super权限的用户除外)
read_only-1
docker restart mysql-slave
show master status;
docker exec -it mysql-slave /bin/bsh
mysql -uroot -proot
change master to master_host='宿主机ip',master_user='slave',master_password='123456',master_port=3307,master_log_file='mall-mysql-bin,000001',master_log_pos=617,master_connect_retry=30;
MASTER_HOST='宿主机ip'
:设置主服务器的 IP 地址(或主机名)。MASTER_USER='slave'
:设置主服务器的用户名。MASTER_PASSWORD='123456'
:设置主服务器的密码。MASTER_PORT=3307
:设置主服务器的端口号。MASTER_LOG_FILE='mall-mysql-bin.000001'
:设置主服务器的二进制日志文件名。MASTER_LOG_POS=617
:设置主服务器的二进制日志位置。MASTER_CONNECT_RETRY=30
:设置从服务器重试连接主服务器的间隔时间(单位:秒)。通过执行这个命令,可以将从服务器配置为连接到指定的主服务器,并使用指定的凭据进行认证和复制操作。请确保替换 '宿主机ip'
、'slave'
、'123456'
、'mall-mysql-bin.000001'
和 617
为正确的主服务器信息。
show slave status \G;
start slave;
从机使用库-查看记录,ok