程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 【MySQL筆記】mysql源碼安裝/配置步驟及支持中文gbk/gb2312編碼的配置方法

【MySQL筆記】mysql源碼安裝/配置步驟及支持中文gbk/gb2312編碼的配置方法

編輯:MySQL綜合教程

好久之前的學習筆記,分享出來,希望能幫助到更多初學者

備注:本筆記以mysql-5.1.73版本為例進行說明

1. mysql源碼編譯/安裝步驟

1) 官網下載mysql源碼並解壓
2) cd至源碼目錄,執行

./configure  --prefix=/home/slvher/tools/mysql-5.1.73 --with-charset=gbk --with-charset=gb2312 --with-extra-charsets=all --with-plugins=max-no-ndb
備注:
--prefix指定安裝目錄,需根據實際情況修改
--with-charset指定默認支持的字符集,可指定多個(若需要數據庫支持簡體中文,請務必指定gbk和gb2312,至少要指定1個
--with-plugins指定安裝innodb引擎(從mysql5.1版本開始需要手動指定,之前則是默認安裝的)
3) 查看Makefile文件,確認幾個基本配置無誤後,執行
   shell> make
   shell> make install
備注1若install失敗是由第2步執行./configure時參數指定錯誤所致,則需重新執行./configure且務必執行make clean後,再重新make && make install。若不先make clean直接make,則源碼目錄下上次編譯完的部分文件不會重新編譯,而這些上次編譯的文件使用的還是上次的錯誤配置參數!
備注2:安裝完成後,cd至mysql安裝目錄(通過--prefix指定的路徑或默認的系統路徑),可以看到bin/include/lib之類的文件夾,這表明二進制文件安裝成功
4) 從源碼目錄的support-files文件夾拷貝my-medium.cnf(共有small/medium/large三個level,根據機器配置選擇合適的)配置至~/.my.cnf文件,並配置相關參數。mysql server啟動時會讀取該文件的配置,關於mysql對my.cnf文件的搜索路徑,可以查看官方的mysql-refman文檔。
備注:my.cnf配置不當可能會引起mysql報錯,例如"mysql: unknown variable 'character-set-server=utf8'",該問題解決方法參見這裡
5) 在mysql安裝目錄先後執行如下命令以便安裝權限表及默認數據庫
 ./bin/mysql_install_db --basedir=/home/slvher/tools/mysql-5.1.73 --datadir=/home/slvher/tools/mysql-5.1.73/db-data
 ./bin/mysql_install_db --user=slvher
6) 在mysql安裝目錄執行如下命令啟動mysqld:
./bin/mysqld_safe &
7) 執行ps -x查看mysqld是否啟動成功,其中d表示守護模式。因此,正常的關閉mysqlserver的方法應該是下面的命令:
./bin/mysqladmin shutdown -uroot -p
然後輸入root密碼即可停掉mysqld進程,若強行kill -9殺進程可能會導致數據庫損壞!
8) 將mysql執行路徑加入PATH變量的搜索路徑

至此,支持中文gbk和gb2312的mysql server安裝完成。可執行以下命令驗證其支持的字符集:
   shell> mysql -uroot  
   mysql> show character set;
備注1:新安裝的mysql server,root默認密碼為空
備注2:若在第2步執行./configurer時通過--with-charset參數指定了gbk或gb2312,則show的輸出應該能看到這些字符集,否則,就准備重新安裝一遍吧 -_- 

2. 安裝完成並啟動mysqld_safe後的訪問權限配置

1) 設定mysql server的root密碼
root密碼默認為空(因此,運行mysql -uroot可直接登錄;此外,登錄後運行"select User, Host, Password from mysql.user"可以看到root的Password那個字段為空),所以需要設定root密碼,方法有幾種:
a. 使用set password語句:

      shell> mysql -u root
      mysql> set password for 'root'@'localhost' = PASSWORD('xxx');  # 其中xxx為新密碼
      mysql> set password for 'root'@'host_name' = PASSWORD('xxx');  # 其中host_name為機器名  
      mysql> set password for 'root'@'127.0.0.1' = PASSWORD('xxx');
b. 使用update語句:
      shell> mysql -u root
      mysql> update mysql.user set Password = PASSWORD('xxx') where User = 'root';
      mysql> flush privileges;  # 該語句會讓mysql server重新讀取權限表
若root對應的Host字段有多個,則推薦使用這種方法指定root密碼,因為它明顯更簡潔。
c. 使用mysqladmin工具:
      shell> mysqladmin -u root password "xxx" 
      shell> mysqladmin -u root -h host_name passord "xxx"
這種方法無法設定形如'root'@'127.0.0.1'的root新密碼,故個人覺得用處不大。
注意:新安裝的mysql server默認允許本機匿名用戶登錄,若不需要,最好刪除匿名用戶。 

2) 添加新用戶並授權
由於root權限過大,有必要為mysql添加normal user並設定其權限,可通過以下步驟實現(假設已登錄了mysql server所在機器):

      shell> mysql -u root -pxxx  # 注意-p與password(假設為"xxx")間無空格,可省去輸入密碼的交互過程
      mysql> create user work;
      mysql> grant select on db1.test_table to 'user'@'localhost' identified by 'xxx';
上述grant語句執行效果:從localhost登錄的user必須用xxx密碼才能登錄成功,且只能訪問數據庫db1的test_table表。
若要為從localhost登錄的user授權對所有庫所有表的全部操作權限,則可執行如下命令:
      mysql> grant all privileges on *.* to 'user'@'localhost' identified by 'xxx';
若為遠程登錄的用戶授權(對db1.test_table的select/insert權限),則需執行下面的命令:
      mysql> grant select, insert on db1.test_table to 'user'@'%' identified by 'xxx';
上述語句中的'%'表示任意主機,因此可以覆蓋遠程登錄的情況。
注意1:有時對遠程登錄用戶授權時會發現,即使執行了上述命令,用戶依然無法遠程登錄。這種情況一般是由於該用戶名首先命中了權限表的某條不支持遠程登錄的記錄(如不允許來自某個IP地址的用戶登錄)。排查問題時,可執行select User, Host, Password from mysql.user where User = 'user'以查看user用戶目前擁有的權限,定位其是否具有從任意機器登錄的權限或是否某個記錄明確指定了user用戶不能從某台特定的機器登錄。
注意2:有時完成遠程用戶登錄設置後會發現,遠程登錄正常,而本地通過-h localhost 或 -h 127.0.0.1登錄時卻無法成功,這一般是由於允許本機匿名用戶無密碼登錄造成的(mysql server默認允許匿名登錄),只需刪除匿名用戶的登錄權限即可。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved