1 docker安装
// 1docker 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.ddocker 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_cicharacter_set_server = utf8// 4 进入mysql容器并检验是否正常docker exec -it 容器名 /bin/bash// 进入mysqlmysql -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.cnfvim /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.cnfvim /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 从机使用库-查看数据