一.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:pen_purge_index_file failed to open register file.
111130 21:02:25 [ERROR]MYSQL_BIN_LOG:pen_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.pidhtml