1 docker安装

  1. // 1
  2. docker pull mysql
  3. // 2 启动容器
  4. // MYSQL_ROOT_PASSWOR: root账户密码
  5. docker run --name 容器名 -e MYSQL_ROOT_PASSWORD=密码 -d mysql
  6. // 2.1 共享数据库容器卷
  7. // 2.1.1 日志 /var/log/mysql
  8. // 2.1.2 数据 /var/lib/mysql
  9. // 2.1.3 配置/etc/mysql/conf.d
  10. docker run --name 容器名 -e MYSQL_ROOT_PASSWORD=密码
  11. -v 宿主机日志:/var/log/mysql
  12. -v 宿主机数据:/var/lib/mysql
  13. -v 宿主机配置:/etc/mysql/conf.d
  14. -d mysql
  15. // 3 conf文件夹下的配置
  16. vim 宿主机配置/my.cnf
  17. // 内容
  18. [client]
  19. default_character_set = utf8
  20. [mysqld]
  21. collation_server = utf8_general_ci
  22. character_set_server = utf8
  23. // 4 进入mysql容器并检验是否正常
  24. docker exec -it 容器名 /bin/bash
  25. // 进入mysql
  26. mysql -uroot -p

2 主从复制(案例)

主机3307

  1. // 1 启动主机mysql容器
  2. docker run --name master-mysql -e MYSQL_ROOT_PASSWORD=zengjun
  3. -v /root/home/mysql-master/log:/var/log/mysql
  4. -v /root/home/mysql-master/data:/var/lib/mysql
  5. -v /root/home/mysql-master/conf:/etc/mysql/conf.d
  6. -p 3307:3306
  7. -d mysql
  8. // 2 修改my.cnf
  9. vim /root/home/mysql-master/conf/my.cnf
  10. // 内容
  11. [mysqld]
  12. ## 设置server-id,同一局域网中唯一
  13. server_id = 101
  14. ## 只当不需要同步的数据库名称
  15. binlog-ignore-db = mysql
  16. ## 开启二进制日志功能
  17. log-bin = mall-mysql-bin
  18. ## 设置二进制日志使用内存大小(事务)
  19. binlog-cache-size = 1M
  20. ## 设置使用二进制日志格式(mixed,statement,row)
  21. binlog-format = mixed
  22. ## 设置使用的二进制日志格式。默认值为0:表示不自动清理
  23. expire_logs_days = 7
  24. ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
  25. ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
  26. slave_skip_errors = 1062
  27. // 3 进入数据库,创建数据同步用户
  28. // 建立用户
  29. CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
  30. CREATE USER 'ted'@'%' IDENTIFIED BY 'zengjun';
  31. // 授权:
  32. // REPLICATION SLAVE 常用于建立复制时所需要用到的用户权限,也就是slave server必须被master server授权具有该权限的用户,才能通过该用户复制。
  33. // REPLICATION CLIENT 不可用于建立复制,有该权限时,只是多了可以使用如"SHOW SLAVE STATUS"、"SHOW MASTER STATUS"等命令。
  34. GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO '用户名'@'%';
  35. GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'ted'@'%';

从机3308

  1. // 1 启动从机mysql容器
  2. docker run --name slave-mysql -e MYSQL_ROOT_PASSWORD=zengjun
  3. -v /root/home/mysql-slave/log:/var/log/mysql
  4. -v /root/home/mysql-slave/data:/var/lib/mysql
  5. -v /root/home/mysql-slave/conf:/etc/mysql/conf.d
  6. -p 3308:3306
  7. -d mysql
  8. // 2 修改my.cnf
  9. vim /root/home/mysql-slave/conf/my.cnf
  10. // 内容
  11. [mysqld]
  12. ## 设置server_id,同一局域网中唯一
  13. server-id = 102
  14. ## 只当不需要同步的数据库名称
  15. binlog-ignore-db = mysql
  16. ## 开启二进制日志功能
  17. log-bin = mall-mysql-slave1-bin
  18. ## 设置二进制日志使用内存大小(事务)
  19. binlog-cache-size = 1M
  20. ## 设置使用二进制日志格式(mixed,statement,row)
  21. binlog-format = mixed
  22. ## 设置使用的二进制日志格式。默认值为0:表示不自动清理
  23. expire_logs_days = 7
  24. ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
  25. ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
  26. slave_skip_errors = 1062
  27. ## relay_log配置中继日志
  28. relay_log = mall-mysql-relay-bin
  29. ## log_slave_updates 表示slave将复制事件写进自己的二进制日志
  30. log_slave_updates = 1
  31. ## slave设置为只读
  32. read_only = 1
  33. // 3 重启从机docker

同步

  1. // 1 进入主机,拿到主从同步状态
  2. mysql> show master status;
  3. +-----------------------+----------+--------------+------------------+-------------------+
  4. | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
  5. +-----------------------+----------+--------------+------------------+-------------------+
  6. | mall-mysql-bin.000002 | 156 | | mysql | |
  7. +-----------------------+----------+--------------+------------------+-------------------+
  8. // 2 进入从机,登录mysql,配置主从复制
  9. // master_host 主数据库的ip地址
  10. // master_user 在主数据库创建的用于同步数据的同步账号
  11. // master_password 在主数据库创建的用于同步数据的同步密码
  12. // master_port 主数据库的运行端口
  13. // master_log_file 指定从数据库要复制数据的日志文件,通过查看主数据库的状态,获取File参数
  14. // master_log_pos 指定从数据库从哪个位置开始复制数据,通过查看主数据库的状态,获取Position参数
  15. // master_connect_retry 连接失败重试的时间间隔,单位为秒
  16. // get_master_public_key mysql8默认使用插件caching_sha2_password,有些client连接报这个错误,需要拿到server的public key来加密password。
  17. 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;
  18. // 3 在从机上查看主从同步状态
  19. show slave status \G;
  20. // Slave_IO_Running: NO
  21. // Slave_SQL_Running: NO
  22. // 4 从机开启主从同步
  23. start slave;
  24. // Slave_IO_Running: Connecting
  25. // Slave_SQL_Running: Yes
  26. // 5 主从复制测试
  27. // 5.1 主机新建库,使用库,新建表,插入表
  28. // 5.2 从机使用库-查看数据