1. 使用源碼安裝好MySQL后,其配置文件一般位於 /usr/local/my.cnf,可以使用如下命令查看查看配置文件的搜索順序:
root@javis:~$ mysqld --help --verbose | grep -B1 -i "my.cnf" 2016-07-26 20:12:24 0 [Note] mysqld (mysqld 5.6.31) starting as process 5732 ... 2016-07-26 20:12:24 5732 [Note] Plugin 'FEDERATED' is disabled. Default options are read from the following files in the given order: /etc/mysql/my.cnf /etc/my.cnf /usr/local/mysql/my.cnf ~/.my.cnf -- -P, --port=# Port number to use for connection or 0 to default to, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default 2016-07-26 20:12:25 5732 [Note] Binlog end 2016-07-26 20:12:25 5732 [Note] Shutting down plugin 'MyISAM' 2016-07-26 20:12:25 5732 [Note] Shutting down plugin 'CSV'
可以看到,紅色標記的那一段話顯示搜索 my.cnf 的順序為 /etc/mysql/my.cnf、/etc/my.cnf、/usr/local/mysql/my.cnf、~/.my.cnf。
使用 'ls /etc/mysql' 命令查看到本機沒有 /etc/mysql 目錄。為了加快搜索速度,將 my.cnf 文件從 /usr/local/mysql/my.cnf 移動到 /etc/my.cnf
mv /usr/local/mysql/my.cnf /etc/my.cnf
2. 配置 my.cnf ,是MySQL默認使用小寫的名字來對數據庫和表進行命名。
UNIX/Linux系統上的MySQL會區分數據庫和表名字的大小寫。解決此問題的一種辦法是,固定使用一種大小寫形式的名字。另一種辦法是,在啟動服務器時,將 lower_case_table_names 系統變量設置為1,這個設置有下面兩個效果:
(i)在為某個表創建相應的磁盤文件之前,服務器會先把該表的名字轉換為小寫。
(ii)在語句里引用這個表時,服務器會在試圖到磁盤上查找這個表之前,把它的名字轉換為小寫。
這種做法的結果是,不管文件系統是否區分大小寫,所有名字都不會區分大小寫。如此一來,在系統間移動數據庫和表會變得容易。不過,這里提醒一下,如果打算使用這種策略,則必須在開始創建數據庫或表之前(而不是之后)通過服務器配置,將 lower_case_table_names 系統變量設置為1。如果在設置此變量之前,已經創建了數據庫或表,而且其名字里包含大寫字母,那么這個設置將無法產生預期的效果,因為磁盤里已經存儲了某些不全為小寫字母的名字。為避免出現這個問題,可以先把名字里有大寫字母的表全部重新命名為小寫字母形式,然后再來設置 lower_case_table_names 系統變量。(可以用 ALTER TABLE 或 RENAME TABLE 語句來重新命名表。)如果有很多表需要重新命名,或者有許多數據庫的名字包含大小寫字母,那么更簡單的辦法是選轉儲這些數據庫,然后在設置了 lower_case_table_names 系統變量之后,再重新創建它們。步驟如下:
(1)用 mysqldump 工具將各個數據庫轉儲出來:
% mysqldump --database -p -uroot db_name > db_name.sql
(2)用 DROP DATABASE 語句刪除這些數據庫。
(3)關閉服務器,配置 my.cnf 文件,添加 'lower_case_table_names=1' 語句,然后重啟 mysqld 服務器。
(4)用mysql 程序重新加載所有的轉儲文件:
% msyql -p -uroot < db_name.sql
由於設置了 lower_case_table_names,所有的數據庫和表在重新創建之后在磁盤里的名字將全部為小寫。
示例如下:
mysql> CREATE TABLE MyTABle (Name varchar(1), id int not null auto_increment , primary key (id) );
Query OK, 0 rows affected (0.29 sec)
mysql> show tables;
+------------------+
| Tables_in_sampdb |
+------------------+
| absence |
| grade_event |
| member |
| mytable |
| president |
| score |
| student |
+------------------+
7 rows in set (0.00 sec)
mysql> desc mytable;
+-------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+----------------+
| Name | varchar(1) | YES | | NULL | |
| id | int(11) | NO | PRI | NULL | auto_increment |
+-------+------------+------+-----+---------+----------------+
2 rows in set (0.01 sec)
由上可見,使用 CREATE TABLE 命令創建了 MyTABle 表,但MySQL按照默認的 lower_case_table_names 設置,將表名存儲為 'mytable'。並且由 'desc mytable' 命令可以看出,lower_case_table_names 並沒有影響到 column_name,因為 mytable 表的Name列的列名依然為 Name。