在 Linux 系統中,使用 yum 安裝 MySQL 是最高效的方式,它能自動解決依賴關係。執行以下命令即可一鍵完成安裝:
[root@localhost ~]# yum install mysql-server mysql-devel
安裝完成後,啟動服務並登入 MySQL:
[root@localhost ~]# /etc/init.d/mysqld start Starting mysqld: [ OK ] [root@localhost ~]# mysql -u root -p Enter password: Welcome to the MySQL monitor... mysql> create database db_test; Query OK, 1 row affected (0.02 sec) mysql> grant all on *.* to "user"@"localhost" identified by "123"; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> quit Bye
主要配置文件 /etc/my.cnf 關鍵參數如下:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
/var/lib/mysql)/var/log/mysqld.log)MySQL 安裝後默認存在空密碼的 root 用戶,極不安全。請立即修改:
[root@localhost ~]# mysqladmin -u root -p password '123' Enter password:
注意:若已修改過密碼,需輸入舊密碼;首次修改時可省略 -p。
MySQL 用戶信息存儲在 mysql.user 表中,可通過 SQL 直接操作。
mysql> grant all on *.* to "test"@"localhost" identified by "123"; Query OK, 0 rows affected (0.00 sec)
all:所有權限,可細化為 select, insert, update, delete*.*:所有數據庫.所有表,可指定為 db_name.*localhost:主機匹配,% 表示任意主機mysql> insert into mysql.user(Host, User, Password) values("localhost", "sqluser", password("123"));
Query OK, 1 row affected, 3 warnings (0.05 sec)
關鍵步驟: 任何用戶變更後必須執行 flush privileges; 刷新權限表,否則不生效。
select user, password from mysql.user;delete from mysql.user where user='XXX'; + flush privileges;所有疑難雜症的根源幾乎都指向同一個原因——root 用戶空密碼。建議安裝即修改為非空密碼。
現象: 空密碼登入時忽好忽壞,報錯 Access denied for user 'root'@'localhost' (using password: NO) 或 YES,甚至 mysqladmin 修改密碼也失敗。
根因: 空密碼導致認證機制混亂,MySQL 內部存在多個 root 記錄(localhost, 127.0.0.1, ::1 等),認證插件匹配失敗。
解決方案(跳過權限表啟動修復):
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('123') where USER='root';
mysql> FLUSH PRIVILEGES;
mysql> quit
# /etc/init.d/mysqld restart
# mysql -uroot -p
Enter password: <輸入新密碼123>
現象: 明明用 root 登入,創建數據庫卻報 Access denied for user ''@'localhost' to database 'db_mysql'。
根因: mysql.user 表中存在「用戶名為空、密碼為空」的匿名用戶。當 root 密碼為空時,MySQL 認證插件可能錯誤匹配到該匿名用戶,導致權限不足。
解決方案:
# service mysqld stop # mysqld_safe --skip-grant-tables & # 新開終端執行: # mysql -u root mysql mysql> delete from user where USER=''; mysql> FLUSH PRIVILEGES; mysql> \q
將 root 密碼設置為非空複雜密碼,可徹底規避上述 90% 的認證異常問題。密碼輸入錯誤會報 using password: YES,屬正常行為,與空密碼故障無關。