Skip to content

index

启动 MySQL 服务

  1. 创建 network
shell
# 172.18.0.1
docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 mysql
  1. 启动 MySQL 服务
shell
docker pull mysql:5.7.34
docker run -itd --name mysql1 -p 3316:3306 --network mysql --ip 172.18.0.101 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.34
docker run -itd --name mysql2 -p 3326:3306 --network mysql --ip 172.18.0.102 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.34
  1. 查看 MySQL 运行状态
shell
mysql --version
# mysql  Ver 14.14 Distrib 5.7.34, for Linux (x86_64) using  EditLine wrapper
mysqld --version
# mysqld  Ver 5.7.34 for Linux on x86_64 (MySQL Community Server (GPL))\

配置 MySQL 主从

  • binlog 三种模式

https://blog.csdn.net/keda8997110/article/details/50895171

https://www.cnblogs.com/langtianya/p/5504774.html

  • binlog 校验模式

https://www.jianshu.com/p/0957a89d4fb4

  • 默认 MySQL 配置文件路径
shell
cat /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
  1. 修改 MySQL 配置

/etc/mysql/mysql.conf.d/mysqld.cnf

conf
[mysqld]
; 不同 Server 需要不同 id
server_id=101

; 启动GTID
gtid-mode=ON
; ON-强制执行GTID一致性
enforce-gtid-consistency=ON

; 开启 MySQL binlog 记录, 使用 mysql-bin 作为binlog文件名前缀
log-bin=mysql-bin
; 指定 binlog 日志模式
;   ROW:以行级别的更改为单位记录。
;   STATEMENT:以 SQL 语句为单位记录更改操作。
;   MIXED:默认情况下使用语句级别记录,但在某些情况下会自动切换到行级别记录1。
binlog_format=ROW
; 关闭 binlog 二进制日志完整性校验
;   NONE:不进行校验。
;   CRC32:使用 CRC32 校验算法。
;   CRC32C:使用 CRC32C 校验算法。
binlog_checksum=NONE
  • 检查 MySQL 主节点配置状态
sql
show variables like 'server_id'\G
Variable_nameValue
server_id101
sql
show master status;
FilePositionBinlog_Do_DBBinlog_Ignore_DBExecuted_Gtid_Set
mysql-bin.000001150
  1. 创建同步用户

需要确认用户拥有 REPLICATION SLAVE 权限

shell
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'your_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
  1. 建立主从关系
sql
change master to
    master_host ='172.18.0.101',
    master_port = 3306,
    master_user ='root',
    master_password ='123456',
    master_auto_position =1;
  • 启动主从同步
sql
start slave;
  • 检查 MySQL 从节点配置状态
sql
show master status;
FilePositionBinlog_Do_DBBinlog_Ignore_DBExecuted_Gtid_Set
mysql-bin.000001150
sql
show slave status;
Slave_IO_StateMaster_HostMaster_UserMaster_PortConnect_RetryMaster_Log_FileRead_Master_Log_PosRelay_Log_FileRelay_Log_PosRelay_Master_Log_FileSlave_IO_RunningSlave_SQL_RunningReplicate_Do_DBReplicate_Ignore_DBReplicate_Do_TableReplicate_Ignore_TableReplicate_Wild_Do_TableReplicate_Wild_Ignore_TableLast_ErrnoLast_ErrorSkip_CounterExec_Master_Log_PosRelay_Log_SpaceUntil_ConditionUntil_Log_FileUntil_Log_PosMaster_SSL_AllowedMaster_SSL_CA_FileMaster_SSL_CA_PathMaster_SSL_CertMaster_SSL_CipherMaster_SSL_KeySeconds_Behind_MasterMaster_SSL_Verify_Server_CertLast_IO_ErrnoLast_IO_ErrorLast_SQL_ErrnoLast_SQL_ErrorReplicate_Ignore_Server_IdsMaster_Server_IdMaster_UUIDMaster_Info_FileSQL_DelaySQL_Remaining_DelaySlave_SQL_Running_StateMaster_Retry_CountMaster_BindLast_IO_Error_TimestampLast_SQL_Error_TimestampMaster_SSL_CrlMaster_SSL_CrlpathRetrieved_Gtid_SetExecuted_Gtid_SetAuto_PositionReplicate_Rewrite_DBChannel_NameMaster_TLS_Version
Waiting for master to send event172.18.0.101root330660mysql-bin.0000011501b7cd647eb37-relay-bin.000002355mysql-bin.000001YesYes00150561None0No0No00101926acfdd-fa32-11ee-829d-0242ac120065/var/lib/mysql/master.info0nullSlave has read all relay log; waiting for more updates864001
  • 确认 当 Slave_IO_Running 与 Slave_SQL_Running 都为 YES 时,则代表主从同步运行正常

  • 数据库全量备份 - mydumper

https://github.com/mydumper/mydumper apt-get install mydumper

shell
mkdir -p /tmp/mysql_backup/
mydumper -u root -p 123456 -h 127.0.0.1 -P 3306 -o /tmp/mysql_backup/ -F 4 -t 15 -v 3 -L /tmp/mysql_backup.log > /dev/null 2>&1
ls -lha /tmp/mysql_backup/

核心文件 ./metadata

docker cp mysql1:/tmp /mysql1_tmp docker cp C:\mysql1_tmp\mysql_backup\ mysql2:/tmp

  • 数据库全量恢复 - myloader
shell
myloader -u root -p 123456 -h 127.0.0.1 -P 3306 -o -d /tmp/mysql_backup/ -t 8 -v 3
  • 设置主从同步
sql

show master status;
show slave status;

stop slave;

reset master;
reset slave;

# from meatdate
set @@GLOBAL.GTID_PURGED = '926acfdd-fa32-11ee-829d-0242ac120065:1-9';

change master to
    master_host ='172.18.0.101',
    master_port = 3306,
    master_user ='root',
    master_password ='123456',
    master_auto_position =1;
set sql_log_bin = 1;
start slave;

show master status;
show slave status;

sql_log_bin = 0 关闭将 sql 记录到 binlog =1 时开启记录到 binlog

TODO

  1. MySQL 主从建立

    1. 修改主从 GTID
    2. 跳过指定事务
  2. MySQL 全量备份

  3. MySQL 全量恢复

  4. MySQL 增量备份与恢复 - 主从同步 mysqladmin flush-logs