[Linux MySQL] MySQL 不停服务来启用 innodb_file_per_table
转载本站文章请注明,转载自:扶凯[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相关推荐
- (转)MySQL 不停服务来启用 innodb_file_per_table
转载自:扶凯[http://www.php-oa.com] 本文链接: http://www.php-oa.com/2012/04/20/mysql-innodb_file_per_table.htm ...
- [转载]MySQL 不停服务来启用 innodb_file_per_table
InnoDB 是一个非常不错的 MySQL 的存储引擎,目前使用非常广泛基本所有的网站和项目,我想都会优先选择这个,这个也有很好的诊断和微调的工具.我发现其中一个缺点,就是磁盘空间管理时设计非常低效. ...
- master slavle mysql_MySQL 不停服务来启用 innodb_file_per_table
InnoDB 是一个非常不错的 MySQL 的存储引擎,目前使用非常广泛基本所有的网站和项目,我想都会优先选择这个,这个也有很好的诊断和微调的工具.我发现其中一个缺点,就是磁盘空间管理时设计非常低效 ...
- linux下mysql服务架设_linux下源码搭建php环境之mysql(一)
现在已经大半夜了,五一劳动节挺无聊的. 折腾一下吧,实在是睡不着.于是乎在电脑上安装个虚拟机,然后呢,在虚拟机上搭建一个php环境. 首先我得安装MYSQL吧.发现遇到的问题真多..待我娓娓道来. 主 ...
- mysql单机在线迁移_MySQL 不停服务 在线进行100亿数据迁移切换
MySQL 不停服务 在线进行100亿数据迁移切换 背景: 促销库压力巨大,单实例已经不足以提供写入性能,虽然有256个分表,但是经常io打满,总数据量已经达到100亿,单实例io已经支撑不住,所以方 ...
- linux mysql 怎么启动客服端_脚本之家教你linux如何启动mysql服务教程图解 linux启动mysql服务命令是什么...
mysql数据库是一种开放源代码的关系型数据库管理系统,有很多朋友都在使用.一些在linux系统上安装了mysql数据库的朋友,却不知道该如何对mysql数据库进行配置.那么linux该如何启动mys ...
- linux命令mysql启动,在linux中启动mysql服务的命令
用reboot命令重启linux服务器之后会导致mysql服务终止,也就是mysql服务没有启动.必须要重启mysql服务,否则启动jboss时会 报有关数据库mysql方面的错误. 命令如下: 第一 ...
- linux系统mysql服务启动失败
查看mysql.sock文件,如忘记了文件位置,则查看/etc/my.cnf文件. 查看mysql.sock文件是否存在 若不存在 1.service mysqld stop (停止服务) 2.rm ...
- linux重启mysql服务_LINUX重启MYSQL的命令
文:老苏 2012-12-02/20:58 如何启动/停止/重启MySQL 一.启动方式 1.使用 service 启动:service mysqld start 2.使用 mysqld 脚本启动:/ ...
最新文章
- 三线表是什么?R语言使用table1包绘制(生成)三线表、构建不分层的三线表
- SQL Server 2005与2000写法上的差别
- vue2.0项目中使用Ueditor富文本编辑器应用中出现的问题
- linux操作系统adsl 上网设置,Linux操作系统下ADSL拨号上网详细步骤
- Hadoop之Hadoop基础知识
- 二叉树总结挺好的很好记忆
- react中的axios配置文件
- Ethercat解析(四)之搭建RTAI实时内核(Ubuntu12.04)
- R-CNN家族梳理:从R-CNN到Mask R-CNN
- 1092 最好吃的月饼 (20分)
- sqlite时间比较_一份经过时间检验的 Laravel PHPUnit 测试经验分享
- 挑战程序设计竞赛:Ants
- 【ThinkPad系统重装】
- python自动产品分类_商品分类(一堆多)
- 限幅二极管基础知识详解
- 如何清理占用计算机内存,告诉你如何深度清理电脑内存
- 单片机看门狗c语言,单片机看门狗程序 -解决方案-华强电子网
- Word转PDF(完美转换,亲测可用)
- 学计算机的演员,南开大学计算机系到演员 张桐回顾“不安分”的青春
- 测试 zxdfasd阿斯顿水电费健康sdgfsdgsg的发oip挥加快了地方噶是的