在 Linux 系統上安裝 MySQL 時,選擇 glibc 版本的二進制包是最快捷、依賴最少的方式。本文以 MySQL 5.0.90 為例,詳細記錄從下載、解壓、建立用戶、初始化數據目錄、設置權限、配置字符集、啟用遠程訪問,到註冊系統服務的完整流程,並附帶常見錯誤排查與實用操作備忘錄。
前往 MySQL 官方歸檔頁面 https://downloads.mysql.com/archives.php,選擇對應版本,務必下載標註 glibc 的包,例如:mysql-5.0.90-linux-i686-glibc23.tar.gz。建議將安裝包存放在 /usr/local/src 等固定目錄,避免放在 /media 等臨時掛載點。
$ sudo groupadd mysql
$ sudo useradd -g mysql mysql
$ cd /usr/local
$ sudo tar zxvf /usr/local/src/mysql-5.0.90-linux-i686-glibc23.tar.gz
$ sudo mv mysql-5.0.90-linux-i686-glibc23 mysql
$ cd mysql
$ sudo chown -R mysql .
$ sudo chgrp -R mysql .
$ scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql
$ cd ..
$ sudo chown -R root mysql
$ cd mysql
$ sudo chown -R mysql data
$ bin/mysqld_safe --basedir=/usr/local/mysql --user=mysql &
此時 MySQL 已在後台運行。若需停止,可另開終端執行 bin/mysqladmin -u root shutdown。
$ cd /usr/local/mysql/bin
$ ./mysql -u root
進入 MySQL 後執行:
mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY 'your_password';
mysql> FLUSH PRIVILEGES;
mysql> EXIT;
再次登錄驗證:
$ ./mysql -u root -p
Enter password: your_password
檢查用戶表,發現 root@linux 和 root@127.0.0.1 仍為空密碼,需補全:
mysql> SET PASSWORD FOR root@linux = PASSWORD('your_password');
mysql> SET PASSWORD FOR root@127.0.0.1 = PASSWORD('your_password');
mysql> FLUSH PRIVILEGES;
$ sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
$ sudo /etc/init.d/mysql start
重啟機器測試服務是否自啟。
編輯 /etc/my.cnf(若不存在,從 support-files/my-huge.cnf 複製一份重命名):
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
init_connect = 'SET NAMES utf8'
重啟服務:
$ sudo /etc/init.d/mysql restart
驗證:
mysql> SHOW VARIABLES LIKE 'character%';
輸出應全部顯示 utf8。
預設僅允許本地連接。登錄 MySQL 後執行:
mysql> USE mysql;
mysql> UPDATE user SET host = '%' WHERE user = 'root' AND host = 'localhost';
mysql> FLUSH PRIVILEGES;
若報錯 Duplicate entry '%-root' for key 1,改用帶條件的 UPDATE 語句即可。
若應用報錯 ImportError: libmysqlclient_r.so.15: cannot open shared object file,執行:
$ sudo cp /usr/local/mysql/lib/libmysqlclient_r.so.15 /usr/lib/
# 重啟
$ sudo /etc/init.d/mysql restart
# 停止
$ sudo /etc/init.d/mysql stop
# 啟動
$ cd /usr/local/mysql
$ bin/mysqld_safe --basedir=/usr/local/mysql --user=mysql &
# 停止
$ bin/mysqladmin -u root -p'your_password' shutdown
mysql> SET NAMES utf8;
/var/lib/mysql(或安裝時指定的 datadir)
# 導出
$ mysqldump db_name > dump.sql
# 建庫
$ mysqladmin create db_name
# 導入
$ mysql db_name < dump.sql
$ sudo mysqladmin -u root -p password 'new_password'
# 或在 MySQL 內:
mysql> USE mysql;
mysql> UPDATE user SET Password=PASSWORD('new_password') WHERE User='root';
mysql> FLUSH PRIVILEGES;
$ sudo /etc/init.d/mysql stop
$ sudo mysqld_safe --skip-grant-tables &
$ sudo mysqladmin -u root password 'new_password'
$ sudo mysqladmin flush-privileges
$ ./mysql -u root -h 127.0.0.1 -p
$ bin/mysql_secure_installation
按提示依次設置 root 密碼、移除匿名用戶、禁止 root 遠程登錄、刪除 test 庫、刷新權限。