MySQL數據文件說明 一.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