首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重新生成mysql从服务器,添加innodb_file_per_table而不锁定主服务器

问重新生成mysql从服务器,添加innodb_file_per_table而不锁定主服务器
EN

Database Administration用户
提问于 2017-02-28 12:09:13
回答 1查看 514关注 0票数 1

我想重建一个mysql从服务器,将innodb_file_per_table添加到配置中,以减少所使用的磁盘空间(idbdata1增长了很多)。我想这样做,而不锁定主人的桌子,我画了一个程序,似乎是可行的,但我想知道它是否真的准确。我在两个vms上测试了这个。

下面是测试的配置:

关于主人:

代码语言:javascript
复制
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

在奴隶身上:

代码语言:javascript
复制
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

在开始程序之前:

在奴隶身上:

代码语言:javascript
复制
Seconds_Behind_Master: 0

此时,我尝试用新的配置重新构建从属程序,然后让他继续复制它停止的地方。

  1. 在奴隶上:stop slave
  2. 在主服务器上:插入t1值(4,1) #i在数据库测试中的表t1中插入值,以验证从节点能够恢复进程中发生的复制数据
  3. 在奴隶上:mysqldump -u root -p --opt test > test_slave.sql
  4. 在母版上:插入t1值(5,1)
  5. 在奴隶上:drop database test
  6. 在母版上:插入t1值(6,1)
  7. 在奴隶身上:

更改配置以设置innodb_file_per_table:

代码语言:javascript
复制
innodb_file_per_table
innodb_flush_method=O_DIRECT
  1. 在母版上:插入t1值(7,1)
  2. 在奴隶身上:

从最后一个停止从中存储bin日志复制位置:

代码语言:javascript
复制
mysql -u root -p -e "show slave status \G;" > status
  1. 在奴隶上:service mysql restart
  2. 在奴隶上:stop slave
  3. 在母版上:插入到t1值中(8,1)
  4. 在奴隶身上:

创建数据库&&导入转储:

代码语言:javascript
复制
mysql -u root -p -e "create database test;"
mysql -u root -p -b test < test_slave.sql
  1. 在母版上:插入到t1值中(9,1)
  2. 在奴隶身上:

将复制重新配置为从最后一个停止从位置开始(将master_log_pos和master_log_file存储在状态文件中):

代码语言:javascript
复制
change master to MASTER_HOST='db01',MASTER_USER='myuser',MASTER_PASSWORD='mypasswd',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=477;
  1. 在奴隶上:启动奴隶

在第16步之后,在进程中在主服务器上进行的所有插入都会出现在从服务器上的test.t1中,并且复制正在工作。

代码语言:javascript
复制
               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

它似乎是成功的。但是,如果有人在这个过程中看到了一个陷阱(在这个有限的实验室环境中我看不到),那么分享一下是很好的:)

谢谢,

EN

回答 1

Database Administration用户

回答已采纳

发布于 2017-02-28 17:43:50

实际上,所有这些都可以更短:

  1. 在从服务器上停止mysql,更改设置,在从服务器上启动MySQL
  2. 登录到MySQL;停止从mysql客户端退出
  3. 从主人那里直接从奴隶那里弃尸:

mysqldump

  1. 还原奴隶转储

mysql -u根-p < dump.sql

  1. 开始奴隶

它不会锁定主程序(在InnoDB表的情况下)并自动调整从主到母机的位置。

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/165713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档