转载本站文章请注明,转载自:扶凯[http://www.php-oa.com]

本文链接: http://www.php-oa.com/2012/04/20/mysql-innodb_file_per_table.html

InnoDB  是一个非常不错的 MySQL 的存储引擎,目前使用非常广泛基本所有的网站和项目,我想都会优先选择这个,这个也有很好的诊断和微调的工具.我发现其中一个缺点,就是磁盘空间管理时设计非常低效.这个设计成给所有数据都存到 ibdata1 文件,所以这个文件的存储空间会不断的扩展.InnoDB 并不会收缩这些空间,就算你删除表和数据库.

所以我们需要注意我们的配置.最好一开始就使用 innodb_file_per_table 的选项.这样可以使得更加灵活性的给数据存到每个单表的数据库. 我非常不幸地, 最开始我的数据并没有考虑这个所以没有打开这个参数.后来我测试过,在之后打开这个参数根本不能生效.所以只能 dump 整个数据库,然后在启动这个参数后重新恢复数据库才行.这时我们在想有没有法子,不用关掉数据库的服务时就能完成这个工作.

目前看来只能使用 mysqldump 输出,然后才能恢复.所以我们只能使用 MySQL 的主从模式来切换,才能最大限度地减少停机时间.

所以,我使用的基本步骤是:

  • 配置为当前的原始数据库为 Master 数据库.
  • 使用 Xtrabackup 来备份你的原始数据库.
  • 恢复你的备份和到第二个 MySQL 的实例上.
  • 恢复,但不同步,然后运行 mysqldump 在第二个做为 Slave 的数据库上然后导出.
  • 停止第二个数据库实例,并删除数据库.
  • 创建一个新的数据库,使用前面导出的数据来恢复 MySQL 的实例,记得先要打开 innodb_file_per_table 的选项恢复.
  • 配置这个数据库为 slave 然后运行复制.
  • 当复制完成时,给这个 slave 切换成主,然后重新配置你的客户端使用这个实例
  • 现在可以停止主数据库和删除它.

下面是详细的步骤

准备,配置数据库主从

这个看以前的 Blog 有讲怎么在线做 MySQL 的主从.接下来在 Slave 上做转换的操作

Dump 出 Slave 上的数据

假设你根据我以前的文章都做好了.现在配置好 slave 了.记得使用 innobackupex-1.5.1 –apply-log 恢复后,然后复制到数据库的目录.并修改权限.

这时记得先不要设置同步.直接启动数据后.直接使用 MySQL 的 mysqldump 来导出整个数据库.

?
1
2
3
service mysqld start
mysqldump -uroot -p --quick  --default-character-set=utf8 bbsee >dump_data.sql
service mysqld stop

创建新的数据库

在新的机器上.安装新的数据库文件.只保留 dump_data.sql.然后使用 mysql_install_db 来建权限数据,MySQL 的数据库

?
1
mysql_install_db --user=mysql

创建新的配置文件

vim /etc/mysql/my.cnf

添加以下行到新的文件:

innodb_file_per_table = 1
server-id = 2
bin-log = 1

我在次声明,这是成功的关键,innodb_file_per_table 会让过一会导入的数据按表来存, binlog 是为了以后切主的时候使用.

启动 MySQL的并配置 Slave 的同步

先要启动数据库

?
1
server mysqld start

恢复导出的数据库

?
1
mysql -uroot -p  --default-character-set=utf8  < dump_data.sql

配置复制
因为刚导入数据库,所以要从现在开始复制,需要在主数据库上根据我以前的文章,给这个设置好权限,然后我们在 Slave 配置一下 slave 的设置

?
1
2
3
4
5
6
7
change master to master_host='127.0.0.1',
master_user='repl',
master_password='passwd',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=3874;
start slave;

这个中的 master_log_file 和 master_log_pos 是根据我以前文章刚开始使用 innobackupex 做主数据备份时 xtrabackup_binlog_info 中的信息

?
1
mysql -uroot -p -e "show slave status\G"|grep Seconds

当MySQL显示 Seconds_Behind_Master: 0 时,这就 Slave 就同步的和主数据库一样了.

主从切换

现在备份完 Salve 也同步成和主一样,这时因为使用了  innodb_file_per_table 的参数,所以可以切成主了.直接在主数据库中锁一下数据库

?
1
SET global read_only=1;

然后查看主数据库的状态,写 binlog 到那个文件,什么位置了.

?
1
SHOW master STATUS;

接着到 Slavle 的数据库上看看是不同步到一样的状态了.

?
1
SHOW slave STATUS \G;

确保主从同步的一样后,先到 Slave 上停止 Slave 的复制变成新的 master,这时才方便切成主,所以要在新的 master上执行

?
1
2
3
4
stop slave
change master to master_host=”
reset slave
reset maters

之所以要在新的master上执行change master to master_host=”及reset slave,主要是为了断开与老的master之间连接信息.

现在切完了,可以根据以前设置 msater 的经验来给原来的主数据库设置成这个的 slave .也可以给这个重新备份一个出来,在恢复了.

转载于:https://blog.51cto.com/dadloveu/908265

[Linux MySQL] MySQL 不停服务来启用 innodb_file_per_table相关推荐

  1. (转)MySQL 不停服务来启用 innodb_file_per_table

    转载自:扶凯[http://www.php-oa.com] 本文链接: http://www.php-oa.com/2012/04/20/mysql-innodb_file_per_table.htm ...

  2. [转载]MySQL 不停服务来启用 innodb_file_per_table

    InnoDB 是一个非常不错的 MySQL 的存储引擎,目前使用非常广泛基本所有的网站和项目,我想都会优先选择这个,这个也有很好的诊断和微调的工具.我发现其中一个缺点,就是磁盘空间管理时设计非常低效. ...

  3. master slavle mysql_MySQL 不停服务来启用 innodb_file_per_table

    InnoDB  是一个非常不错的 MySQL 的存储引擎,目前使用非常广泛基本所有的网站和项目,我想都会优先选择这个,这个也有很好的诊断和微调的工具.我发现其中一个缺点,就是磁盘空间管理时设计非常低效 ...

  4. linux下mysql服务架设_linux下源码搭建php环境之mysql(一)

    现在已经大半夜了,五一劳动节挺无聊的. 折腾一下吧,实在是睡不着.于是乎在电脑上安装个虚拟机,然后呢,在虚拟机上搭建一个php环境. 首先我得安装MYSQL吧.发现遇到的问题真多..待我娓娓道来. 主 ...

  5. mysql单机在线迁移_MySQL 不停服务 在线进行100亿数据迁移切换

    MySQL 不停服务 在线进行100亿数据迁移切换 背景: 促销库压力巨大,单实例已经不足以提供写入性能,虽然有256个分表,但是经常io打满,总数据量已经达到100亿,单实例io已经支撑不住,所以方 ...

  6. linux mysql 怎么启动客服端_脚本之家教你linux如何启动mysql服务教程图解 linux启动mysql服务命令是什么...

    mysql数据库是一种开放源代码的关系型数据库管理系统,有很多朋友都在使用.一些在linux系统上安装了mysql数据库的朋友,却不知道该如何对mysql数据库进行配置.那么linux该如何启动mys ...

  7. linux命令mysql启动,在linux中启动mysql服务的命令

    用reboot命令重启linux服务器之后会导致mysql服务终止,也就是mysql服务没有启动.必须要重启mysql服务,否则启动jboss时会 报有关数据库mysql方面的错误. 命令如下: 第一 ...

  8. linux系统mysql服务启动失败

    查看mysql.sock文件,如忘记了文件位置,则查看/etc/my.cnf文件. 查看mysql.sock文件是否存在 若不存在 1.service mysqld stop (停止服务) 2.rm ...

  9. linux重启mysql服务_LINUX重启MYSQL的命令

    文:老苏 2012-12-02/20:58 如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start 2.使用 mysqld 脚本启动:/ ...

最新文章

  1. 三线表是什么?R语言使用table1包绘制(生成)三线表、构建不分层的三线表
  2. SQL Server 2005与2000写法上的差别
  3. vue2.0项目中使用Ueditor富文本编辑器应用中出现的问题
  4. linux操作系统adsl 上网设置,Linux操作系统下ADSL拨号上网详细步骤
  5. Hadoop之Hadoop基础知识
  6. 二叉树总结挺好的很好记忆
  7. react中的axios配置文件
  8. Ethercat解析(四)之搭建RTAI实时内核(Ubuntu12.04)
  9. R-CNN家族梳理:从R-CNN到Mask R-CNN
  10. 1092 最好吃的月饼 (20分)
  11. sqlite时间比较_一份经过时间检验的 Laravel PHPUnit 测试经验分享
  12. 挑战程序设计竞赛:Ants
  13. 【ThinkPad系统重装】
  14. python自动产品分类_商品分类(一堆多)
  15. 限幅二极管基础知识详解
  16. 如何清理占用计算机内存,告诉你如何深度清理电脑内存
  17. 单片机看门狗c语言,单片机看门狗程序 -解决方案-华强电子网
  18. Word转PDF(完美转换,亲测可用)
  19. 学计算机的演员,南开大学计算机系到演员 张桐回顾“不安分”的青春
  20. 测试 zxdfasd阿斯顿水电费健康sdgfsdgsg的发oip挥加快了地方噶是的

热门文章

  1. 算法-空瓶换啤酒问题
  2. [CF538B]Quasi Binary
  3. 原创:Android应用开发记录-Andorid歌词秀(3)使用的Service的音频播放器
  4. 双击AI文件变成打印而不是打开的解决方案
  5. 10.26如何用C语言计算圆的周长与面积
  6. 南瓜树数据平台——共享数据API服务平台(后端的利器,前端的神器)
  7. 使用John破解Linux密码(简单密码)
  8. Excel如何快速统计某班级男生和女生人数
  9. 毕业设计 嵌入式 智能门禁系统
  10. C语言:题目:将输入的一个字符串按反序存放