MySQL5.7开启独立表空间参数innodb_file_per_table【原创】

今天在线上某个系统发现MySQL数据库使用的是共享表空间,想修改为独立表空间,操作如下:

#因为是主从结构,在从库修改测试,先关闭binlog
SET SQL_LOG_BIN=0;
show variables like "SQL_LOG_BIN";
show global variables like "innodb_file_per_table";
set global innodb_file_per_table=1;
show global variables like "innodb_file_per_table";
SET SQL_LOG_BIN=1;
#编辑配置文件
vi /etc/my.cnf innodb_file_per_table=1

 

改为参数后进入datadir发现还是共享表空间。

这是因为动态修改后仅对后续操作生效,如原来为共享表空间,动态修改为独立表空间后仅新建的表、或修改旧表结构时才会生效为独立表空间

经过生产系统的实践,如果要想改成每个表数据都是独立表空间。

1、先对数据库进行全备包括触发器、存储过程等,以免影响业务使用。

2、最好生产库有从库,或者其他高可用架构,这样方便切换不影响业务。我负责的数据库是keepalived+MySQL主主复制

试验环境

A:192.168.26.63(以下简称63)

B:192.168.26.64(以下简称64)

1、63、64上的停止复制,先将vip飘到63上,做64数据库的操作

stop slave;
reset slave all;


2、停止数据库服务

service mysqld stop
修改配置文件
vi /etc/my.cnf
innodb_file_per_table = 1


3、启动数据库

service mysqld start
验证参数
show global variables like '%per_table%';
show variables like '%per_table%';


# 按照网上查的删除ibdata1文件和日志,这步有问题的,删除数据文件是mysql是无法启动的。所以下面我的操作是重新初始化数据库重建。
rm -rf ibdata1
rm -rf ib_logfile*


4、直接初始化数据库

mysqld --defaults-file=/etc/my.cnf --initialize


5、还原数据库

source all_mysql.sql
查看数据库文件是否分开

mysql表导入完成后,要刷新一下才能生效
flush privileges;


6、64上重新配置主从复制

CHANGE MASTER TO MASTER_HOST='192.168.26.63',
MASTER_USER='backup',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=588785830 FOR CHANNEL '633306';

 

7、确认数据主从同步后,同样的方法在切换keepalived vip至64,做63的数据库。


注意:切换keepalived时可能会影响业务数据读写,请提前和业务沟通好。本次变更,有得java应用定时任务执行失败,重启java应用后恢复。

此次完成 每个表数据都是独立表空间操作后,发现用pt-table-sync校验主从同步时也正常了,之前共享表空间时运行pt-table-sync时会造成数据库无法使用,即使加了no-lock参数也影响数据库,看来和独立表空间也有关系。

posted @ 2019-04-10 17:15  paul_hch  阅读(1026)  评论(0编辑  收藏  举报