一.将现有的myiasm引擎转化为innodb引擎
1.首先我们知道myisam有几点特别烦
a( 运用的是表级锁
b( 不支持csr(故障自动恢复)
2.mysql的5.1.177版本innodb引擎支持并不完善,到了5.6.38支持则非常完美,所以不要拿太低版本来做实验了
3.开始备份我们的数据
mysqldump -uroot -p123 库名 表名 >/tmp/a.sql
4.对备份进行处理,将引擎转化为engine
sed -i 's#ENGINE=MYISAM#ENGINE=INNODB#g' /tmp/a.sql
5.将修改后的备份导入
mysql> source /tmp/a.sql
6.测试一下是否发生改变,用命令看看
mysql> show table status like '表名'\G
二.存储引擎共享表空间和独立空间
1.表空间概念实在5.5版本之后出现的,目的是为了让数据库的存储更容易扩展
2.共享表空间中默认存储(临时表、undo、系统数据)5.7版本中默认会将undo和临时表独立出来,5.6版本也可以独立,只不过需要在初始化的时候进行配置
3.查看共享表空间
#物理查看
[root@db01 ~]# ll /application/mysql/data/
-rw-rw---- mysql mysql Aug : ibdata1
#命令行查看
mysql> show variables like '%path%';
innodb_data_file_path =bdata1:12M:autoextend
4.设置方法(第一个ibdata的数值要求与查看一样)
#编辑配置文件
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
5.独立表空间:对于用户自主创建的表,会采用此种模式,每个表由一个独立的表空间进行管理
6.查看独立表空间
#物理查看
[root@db01 ~]# ll /application/mysql/data/world/
-rw-rw---- mysql mysql Aug : city.ibd
#命令行查看
mysql> show variables like '%per_table%';
innodb_file_per_table=ON
三.在没备份数据时,由于意外你表坏了,如何恢复
1.拷贝你的表到新的mysql数据库中
[root@db01 ~]# cp -r /application/mysql/data/world/ /xingku/data/
2.启动新的数据库
mysqld_safe --defaults-file=/xingku/my.cnf &
3.登陆以前的数据库进行查看
mysql> select * from city;
ERROR (42S02): Table 'world.city' doesn't exist
4.找到以前的表结构在新库中创建(没有,就找开发要)
mysql> show create table world.city;
#删掉外键创建语句
CREATE TABLE `city` (
`ID` int() NOT NULL AUTO_INCREMENT,
`Name` char() NOT NULL DEFAULT '',
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
5.删除新库的表空间文件
mysql> alter table city_new discard tablespaces;
6.拷贝旧表空间文件
[root@db01 world]# cp /application/data/world/city.ibd /xingku/data/world/city_new.ibd
7.授权
chown -R mysql.mysql /xingku
8.导入表空间
mysql> alter table city_new import tablespace;
接下来有两种方法
a( 让开发把代码改一下链接到新库中
b( 将新表导入到旧库中(小数据使用,大量数据你试试)
9.导出新的表
mysqldump -uroot -p123 world city > /tmp/a.sql
10.删除旧库中的表文件
rm -rf city.*
11.登陆旧库,导入新表
mysql> source /tmp/a.sql