我想重建一个mysql从服务器,将innodb_file_per_table添加到配置中,以减少所使用的磁盘空间(idbdata1增长了很多)。我想这样做,而不锁定主人的桌子,我画了一个程序,似乎是可行的,但我想知道它是否真的准确。我在两个vms上测试了这个。
下面是测试的配置:
关于主人:
server-id = 10
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = test
#binlog_ignore_db = include_database_name在奴隶身上:
server-id = 20
log_bin = /var/log/mysql/mysql-bin.log
relay_log = /var/log/mysql/mysql-relay-bin.log
expire_logs_days = 10
max_binlog_size = 100M
binlog_do_db = test在开始程序之前:
在奴隶身上:
Seconds_Behind_Master: 0此时,我尝试用新的配置重新构建从属程序,然后让他继续复制它停止的地方。
stop slavemysqldump -u root -p --opt test > test_slave.sqldrop database test更改配置以设置innodb_file_per_table:
innodb_file_per_table
innodb_flush_method=O_DIRECT从最后一个停止从中存储bin日志复制位置:
mysql -u root -p -e "show slave status \G;" > statusservice mysql restartstop slave创建数据库&&导入转储:
mysql -u root -p -e "create database test;"
mysql -u root -p -b test < test_slave.sql将复制重新配置为从最后一个停止从位置开始(将master_log_pos和master_log_file存储在状态文件中):
change master to MASTER_HOST='db01',MASTER_USER='myuser',MASTER_PASSWORD='mypasswd',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=477;在第16步之后,在进程中在主服务器上进行的所有插入都会出现在从服务器上的test.t1中,并且复制正在工作。
Slave_IO_State: Waiting for master to send event
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Master_Server_Id: 10它似乎是成功的。但是,如果有人在这个过程中看到了一个陷阱(在这个有限的实验室环境中我看不到),那么分享一下是很好的:)
谢谢,
发布于 2017-02-28 17:43:50
实际上,所有这些都可以更短:
mysqldump
mysql -u根-p < dump.sql
它不会锁定主程序(在InnoDB表的情况下)并自动调整从主到母机的位置。
https://dba.stackexchange.com/questions/165713
复制相似问题