一.將現有的myiasm引擎轉化為innodb引擎 1.首先我們知道myisam有幾點特別煩 a( 運用的是表級鎖 b( 不支持csr(故障自動恢復) 2.mysql的5.1.177版本innodb引擎支持並不完善,到了5.6.38支持則非常完美,所以不要拿太低版本來做實驗了 3.開始備份我們的數據 ...
一.將現有的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---- 1 mysql mysql 79691776 Aug 14 16:23 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---- 1 mysql mysql 688128 Aug 14 16:23 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 1146 (42S02): Table 'world.city' doesn't exist
4.找到以前的表結構在新庫中創建(沒有,就找開發要)
mysql> show create table world.city; #刪掉外鍵創建語句 CREATE TABLE `city` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Name` char(35) 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