在之前的一篇Blog裡看了MySQL的日誌分類,這篇看一下MySQL的 資料檔案。
MySQL 記錄檔 說明
http://blog.csdn.net/tianlesoftware/article/details/7028304
一.MySQL資料檔案說明
先看MySQL DataDirectory下的檔案:
這裡面dave,mysql 都是我們的資料庫名稱,我們在進入mysql 資料庫查看:
在MySQL 中每一個資料庫都會在定義好(或者預設)的資料目錄下存在一個以資料庫名字命名的檔案夾,用來存放該資料庫中各種表資料檔案。不同的MySQL 儲存引擎有各自不同的資料檔案,存放位置也有區別。
多數儲存引擎的資料檔案都存放在和MyISAM 資料檔案位置相同的目錄下,但是每個資料檔案的副檔名卻各不一樣。如MyISAM 用“.MYD”作為副檔名,Innodb 用“.ibd”,Archive 用“.arc”,CSV 用“.csv”,等等。
1.1 “.ibd”檔案和ibdata 檔案
這兩種檔案都是存放Innodb 資料的檔案,之所以有兩種檔案來存放Innodb 的資料(包括索引),是因為Innodb 的資料存放區方式能夠通過配置來決定是使用共用資料表空間存放儲存資料,還是獨享資料表空間存放儲存資料。獨享資料表空間儲存方式使用“.ibd”檔案來存放資料,且每個表一個“.ibd”檔案,檔案存放在和MyISAM資料相同的位置。
如果選用共用儲存資料表空間來存放資料,則會使用ibdata 檔案來存放,所有表共同使用一個(或者多個,可自行配置)ibdata 檔案。ibdata 檔案可以通過innodb_data_home_dir 和innodb_data_file_path兩個參數共同配置組成, innodb_data_home_dir 配置資料存放的總目錄, 而innodb_data_file_path 配置每一個檔案的名稱。當然,也可以不配innodb_data_home_dir而直接在innodb_data_file_path參數配置的時候使用絕對路徑來完成配置。
mysql> showvariables like 'innodb_data%';
+-----------------------+------------------------+
|Variable_name | Value |
+-----------------------+------------------------+
|innodb_data_file_path | ibdata1:10M:autoextend |
| innodb_data_home_dir | |
+-----------------------+------------------------+
2 rows in set(0.01 sec)
innodb_data_file_path中可以一次配置多個ibdata檔案。檔案可以是指定大小,也可以是自動擴充的,但是Innodb 限制了僅僅只有最後一個ibdata 檔案能夠配置成自動擴充類型。當我們需要添加新的ibdata 檔案的時候,只能添加在innodb_data_file_path配置的最後,而且必須重啟MySQL 才能完成ibdata 的添加工作。
1.2 “.frm”檔案
與表相關的中繼資料(meta)資訊都存放在“.frm”檔案中,包括表結構的定義資訊等。不論是什麼儲存引擎,每一個表都會有一個以表名命名的“.frm”檔案。所有的“.frm”檔案都存放在所屬資料庫的檔案夾下面。
1.3 “.MYD”檔案
“.MYD”檔案是MyISAM 儲存引擎專用,存放MyISAM 表的資料。每一個MyISAM 表都會有一個“.MYD”檔案與之對應,同樣存放於所屬資料庫的檔案夾下,和“.frm”檔案在一起。
1.4 “.MYI”檔案
“.MYI”檔案也是專屬於MyISAM儲存引擎的,主要存放MyISAM表的索引相關資訊。對於MyISAM儲存來說,可以被cache 的內容主要就是來源於“.MYI”檔案中。每一個MyISAM表對應一個“.MYI”檔案,存放於位置和“.frm”以及“.MYD”一樣。
小結一下:
MyISAM 儲存引擎的表在資料庫中,每一個表都被存放為三個以表名命名的物理檔案(frm,myd,myi)。 每個表都有且僅有這樣三個檔案做為MyISAM 儲存類型的表的儲存,也就是說不管這個表有多少個索引,都是存放在同一個.MYI 檔案中。
這個在開始的裡看的比較清楚。
二.更改MySQL 資料檔案目錄
MySQL預設的資料檔案儲存目錄為/var/lib/mysql。下面示範一下修改MySQL預設的data directory。
2.1 建立新的目錄
[root@rac2 /]# mkdir -p /u01/mysql
[root@rac2 lib]# chown mysql.mysql/u01/mysql
[root@rac2 lib]# chmod -R 777 /u01/mysql
2.2 停mysql
[root@rac2 lib]# service mysql stop
Shutting down MySQL... [ OK ]
[root@rac2 lib]# ps -ef|grep mysql
root 3955 3799 0 20:00 pts/2 00:00:00 grep mysql
2.3 移動目錄
[root@rac2 lib]# mv /var/lib/mysql /u01/
2.4 修改my.cnf設定檔
如果/etc/目錄下沒有my.cnf設定檔,到/usr/share/mysql/下找到*.cnf檔案,拷貝其中一個到/etc/並改名為my.cnf。命令如下:
[root@rac2 mysql]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
vi修改my.cnf的sock 檔案位置:
# The MySQL server
[mysqld]
port = 3306
#socket = /var/lib/mysql/mysql.sock
socket = /u01/mysql/mysql.sock
skip-external-locking
key_buffer_size = 16M
#max_allowed_packet = 1M
max_allowed_packet=100M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
2.5 修改啟動指令碼:/etc/init.d/myql
[root@rac2 mysql]# vi /etc/init.d/mysql
datadir=/u01/mysql
2.6 啟動mysql
[root@rac2 mysql]# service mysql start
Starting MySQL..... [ OK ]
啟動成功,查看進程:
[root@rac2 mysql]# ps -ef|grep mysql
root 11512 1 2 21:02 pts/2 00:00:00 /bin/sh /usr/bin/mysqld_safe--datadir=/u01/mysql --pid-file=/u01/mysql/rac2.pid
mysql 11769 11512 5 21:02 pts/2 00:00:00 /usr/sbin/mysqld --basedir=/usr--datadir=/u01/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql--log-error=/u01/mysql/rac2.err --pid-file=/u01/mysql/rac2.pid--socket=/u01/mysql/mysql.sock --port=3306
root 11796 3799 0 21:02 pts/2 00:00:00 grep mysql
2.7 其中的小插曲:
之前給/u01/mysql 目錄賦的755 許可權,但是啟動報錯:
[root@rac2 mysql]# service mysql start
Starting MySQL....The server quit withoutupdating PID file[FAILED]ysql/rac2.pid).
查看log:/u01/mysql/rac2.err
111130 20:59:34 [Note] /usr/sbin/mysqld:Shutdown complete
111130 20:59:34 mysqld_safe mysqld from pidfile /u01/mysql/rac2.pid ended
111130 21:02:25 mysqld_safe Starting mysqlddaemon with databases from /u01/mysql
/usr/sbin/mysqld: File './mysql-bin.~rec~'not found (Errcode: 13)
111130 21:02:25 [ERROR]MYSQL_BIN_LOG::open_purge_index_file failed to open register file.
111130 21:02:25 [ERROR]MYSQL_BIN_LOG::open_index_file failed to sync the index file.
111130 21:02:25 [ERROR] Aborting
應該是許可權不夠,不能建立pid 檔案,賦給777 許可權後,正常:
chmod -R 777 /u01/mysql
[root@rac2 mysql]# ll /u01/mysql/rac2.pid
-rw-rw---- 1 mysql mysql 6 Nov 30 21:02/u01/mysql/rac2.pid
-------------------------------------------------------------------------------------------------------
著作權,文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任!
Blog: http://blog.csdn.net/tianlesoftware
Weibo: http://weibo.com/tianlesoftware
Email: tianlesoftware@gmail.com
Skype: tianlesoftware
-------加群需要在備忘說明Oracle資料表空間和資料檔案的關係,否則拒絕申請----
DBA1 群:62697716(滿); DBA2 群:62697977(滿) DBA3 群:62697850(滿)
DBA 超級群:63306533(滿); DBA4 群:83829929 DBA5群: 142216823
DBA6 群:158654907 DBA7 群:172855474 DBA8群:102954821