1 docker安装
// 1
docker pull mysql
// 2 启动容器
// MYSQL_ROOT_PASSWOR: root账户密码
docker run --name 容器名 -e MYSQL_ROOT_PASSWORD=密码 -d mysql
// 2.1 共享数据库容器卷
// 2.1.1 日志 /var/log/mysql
// 2.1.2 数据 /var/lib/mysql
// 2.1.3 配置/etc/mysql/conf.d
docker run --name 容器名 -e MYSQL_ROOT_PASSWORD=密码
-v 宿主机日志:/var/log/mysql
-v 宿主机数据:/var/lib/mysql
-v 宿主机配置:/etc/mysql/conf.d
-d mysql
// 3 conf文件夹下的配置
vim 宿主机配置/my.cnf
// 内容
[client]
default_character_set = utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
// 4 进入mysql容器并检验是否正常
docker exec -it 容器名 /bin/bash
// 进入mysql
mysql -uroot -p
2 主从复制(案例)
主机3307
// 1 启动主机mysql容器
docker run --name master-mysql -e MYSQL_ROOT_PASSWORD=zengjun
-v /root/home/mysql-master/log:/var/log/mysql
-v /root/home/mysql-master/data:/var/lib/mysql
-v /root/home/mysql-master/conf:/etc/mysql/conf.d
-p 3307:3306
-d mysql
// 2 修改my.cnf
vim /root/home/mysql-master/conf/my.cnf
// 内容
[mysqld]
## 设置server-id,同一局域网中唯一
server_id = 101
## 只当不需要同步的数据库名称
binlog-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
// 3 进入数据库,创建数据同步用户
// 建立用户
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
CREATE USER 'ted'@'%' IDENTIFIED BY 'zengjun';
// 授权:
// REPLICATION SLAVE 常用于建立复制时所需要用到的用户权限,也就是slave server必须被master server授权具有该权限的用户,才能通过该用户复制。
// REPLICATION CLIENT 不可用于建立复制,有该权限时,只是多了可以使用如"SHOW SLAVE STATUS"、"SHOW MASTER STATUS"等命令。
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO '用户名'@'%';
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'ted'@'%';
从机3308
// 1 启动从机mysql容器
docker run --name slave-mysql -e MYSQL_ROOT_PASSWORD=zengjun
-v /root/home/mysql-slave/log:/var/log/mysql
-v /root/home/mysql-slave/data:/var/lib/mysql
-v /root/home/mysql-slave/conf:/etc/mysql/conf.d
-p 3308:3306
-d mysql
// 2 修改my.cnf
vim /root/home/mysql-slave/conf/my.cnf
// 内容
[mysqld]
## 设置server_id,同一局域网中唯一
server-id = 102
## 只当不需要同步的数据库名称
binlog-ignore-db = mysql
## 开启二进制日志功能
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设置为只读
read_only = 1
// 3 重启从机docker
同步
// 1 进入主机,拿到主从同步状态
mysql> show master status;
+-----------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------------+----------+--------------+------------------+-------------------+
| mall-mysql-bin.000002 | 156 | | mysql | |
+-----------------------+----------+--------------+------------------+-------------------+
// 2 进入从机,登录mysql,配置主从复制
// master_host 主数据库的ip地址
// master_user 在主数据库创建的用于同步数据的同步账号
// master_password 在主数据库创建的用于同步数据的同步密码
// master_port 主数据库的运行端口
// master_log_file 指定从数据库要复制数据的日志文件,通过查看主数据库的状态,获取File参数
// master_log_pos 指定从数据库从哪个位置开始复制数据,通过查看主数据库的状态,获取Position参数
// master_connect_retry 连接失败重试的时间间隔,单位为秒
// get_master_public_key mysql8默认使用插件caching_sha2_password,有些client连接报这个错误,需要拿到server的public key来加密password。
change master to master_host='192.168.203.166', master_user='ted', master_password='zengjun', master_port=3307,master_log_file='mall-mysql-bin.000003',master_log_pos=874,master_connect_retry=30, get_master_public_key=1;
// 3 在从机上查看主从同步状态
show slave status \G;
// Slave_IO_Running: NO
// Slave_SQL_Running: NO
// 4 从机开启主从同步
start slave;
// Slave_IO_Running: Connecting
// Slave_SQL_Running: Yes
// 5 主从复制测试
// 5.1 主机新建库,使用库,新建表,插入表
// 5.2 从机使用库-查看数据