【发布时间】:2021-02-15 20:50:53
【问题描述】:
在尝试在单个主服务器和复制服务器之间执行基本复制设置时,寻找有关我继续做错的指导。
通过多年来的几次试验,这充其量是不一致的。我最近的尝试(步骤)如下所示,这是来自多个站点的高潮,包括 MariaDB 支持站点。
目标:使用mariabackup或其他推荐的方法从主服务器备份数据库,恢复到复制服务器,并成功地将数据从主服务器复制到复制服务器。
使用 Mariabackup 捕获数据的备份
在主服务器上
在 MySQL 命令提示符下运行以下命令
flush privileges; flush tables with read lock;
当数据库被锁定时
运行此命令进行备份
mariabackup --defaults-file="m:\mariadb\my.ini" --backup --target-dir="m:\backup" --user user --password pass
备份后,运行命令准备
mariabackup --defaults-file="m:\mariadb\my.ini" --prepare --target-dir="m:\backup" --user user --password pass
注意 准备完成后,请确保在 MariaDB 命令提示符窗口中运行“解锁表”。
prepare 命令将显示 binlog 文件和在 CHANGE MASTER TO 中使用的位置,因此请务必在完成后捕获 prepare 命令的输出。
prepare 命令的示例输出
mariabackup based on MariaDB server 10.3.12-MariaDB Win64 (AMD64)
mariabackup: cd to m:\backup\
mariabackup: This target seems to be not prepared yet.
mariabackup: using the following InnoDB configuration for recovery:
mariabackup: innodb_data_home_dir = .
mariabackup: innodb_data_file_path = ibdata1:10M:autoextend
mariabackup: innodb_log_group_home_dir = .
mariabackup: Starting InnoDB instance for recovery.
mariabackup: Using 104857600 bytes for buffer pool (set by --use-memory paramete
r)
2020-11-02 22:46:49 0 [Note] InnoDB: Mutexes and rw_locks use Windows interlocke
d functions
2020-11-02 22:46:49 0 [Note] InnoDB: Uses event mutexes
2020-11-02 22:46:49 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2020-11-02 22:46:49 0 [Note] InnoDB: Number of pools: 1
2020-11-02 22:46:49 0 [Note] InnoDB: Using SSE2 crc32 instructions
2020-11-02 22:46:49 0 [Note] InnoDB: Initializing buffer pool, total size = 100M
, instances = 1, chunk size = 100M
2020-11-02 22:46:49 0 [Note] InnoDB: Completed initialization of buffer pool
2020-11-02 22:46:49 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN
=936805148847
2020-11-02 22:46:49 0 [Note] InnoDB: Last binlog file '.\master-bin.000003', pos
ition 167707395
Last binlog file .\master-bin.000003, position 167707395
201102 22:46:50 completed OK!
恢复数据库 将备份目录从 master 复制到 slave 上的 DB 驱动器的根目录
登录从服务器,打开命令提示符到备份目录
运行命令复制恢复备份到从数据目录
mariabackup --copy-back --target-dir="M:\backup" --datadir="m:\mariadb\data" --user infinity --password infinitydb
在从服务器上启动 MariaDB 服务
使用适当的值运行以下更改主命令
示例
CHANGE MASTER TO master_host="idk3-vm5", master_log_file='master-bin.000003', master_log_pos=167707395, master_port=3306, master_user="repl", master_password="repl", master_use_gtid=current_pos;
启动并检查从站
start slave;
show slave status \G
开始复制时出错
MariaDB [(none)]> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Queueing master event to the relay log
Master_Host: idk3-vm5
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000002
Read_Master_Log_Pos: 604529766
Relay_Log_File: idk3-vm8-relay-bin.000002
Relay_Log_Pos: 1631
Relay_Master_Log_File: master-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table:
Last_Errno: 1062
Last_Error: Error 'Duplicate entry 'idk3-vm8-OrderInjector' for key 'PRIMARY'' on query. Default database: 'idf'. Query: 'INSERT INTO `idf`. `idf_client_version` (`idf`.`idf_client_version`.`HOSTNAME`,`idf`.`idf_client_ve rsion`.`SOFTWARE`,`idf`.`idf_client_version`.`VERSION`,`idf`.`idf_client_version `.`LAST_CONNECTED`) VALUES ('idk3-vm8','OrderInjector','20.2.11','2020-11-02 11: 29:13')'
Skip_Counter: 0
Exec_Master_Log_Pos: 1331
Relay_Log_Space: 604530378
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry 'idk3-vm8-OrderInjector' for key 'PRIMARY'' on query. Default database: 'idf'. Query: 'INSERT INTO `idf`. `idf_client_version` (`idf`.`idf_client_version`.`HOSTNAME`,`idf`.`idf_client_ve rsion`.`SOFTWARE`,`idf`.`idf_client_version`.`VERSION`,`idf`.`idf_client_version `.`LAST_CONNECTED`) VALUES ('idk3-vm8','OrderInjector','20.2.11','2020-11-02 11: 29:13')' Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: Slave_Pos
Gtid_IO_Pos: 0-1-701693
Replicate_Do_Domain_Ids: Replicate_Ignore_Domain_Ids:
Parallel_Mode: conservative
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Slave_DDL_Groups: 0 Slave_Non_Transactional_Groups: 0
Slave_Transactional_Groups: 3 1 row in set (0.003 sec)
鉴于我已经刷新了权限、刷新了表并锁定了数据库,然后捕获了备份,我不明白为什么在恢复和完成复制配置后我继续得到重复的密钥。
如果有人能帮助我理解我做错了什么,我将不胜感激。
【问题讨论】:
-
关于从属状态,二进制日志正在从文件 master-bin.000002 中读取,而备份已经进行到 master_log_file='master-bin.000003', master_log_pos=167707395。请在从服务器
reset slave all;上运行命令并再次更改主服务器 -
感谢您的回复。我已经多次运行停止奴隶,重置奴隶,重置奴隶,并重复改变主人。我什至已经完成了这些事情,回到主服务器,刷新 priv,锁定表,通过 show master status 捕获一个新日志和 pos,并在我的 change master to command 中使用它,每次启动时我都会收到重复的键错误复制。
-
检查
idf.idf_client_version在两台服务器上的声明是否相同。 (显示创建表idf.idf_client_version)
标签: mysql mariadb database-replication