1. 程式人生 > >詳解MySQL用戶與授權、MySQL日誌管理、數據亂碼解決方案。

詳解MySQL用戶與授權、MySQL日誌管理、數據亂碼解決方案。

服務 defaults 速查 col pda pro 創建 接下來 方案

數據庫是信息系統中非常重要的環節,合理高效的對它進行管理是很重要的工作。通常是由總管理員創建不同的管理賬戶,然後分配不同的操作權限,把這些賬戶交給相應的管理人員使用。本篇我們在CentOS7.5操作系統上應用MySQL5.7版本。

用戶與授權(用戶管理、授權控制)

一、用戶管理包括:新建用戶、刪除用戶、重命名用戶、給用戶設置密碼、忘記root密碼的解決辦法;
select User,authentication_string,host from user; //查看有多少個用戶及用戶信息 :

技術分享圖片

create user ‘test01‘@‘localhost‘ identified by ‘123123‘; //創建用戶及密碼:

技術分享圖片

grant all on . to ‘test02‘@‘localhost‘ identified by ‘123123‘; //給任何庫任何表創建全部權限的用戶及密碼:

技術分享圖片

drop user ‘test01‘@‘localhost‘; //刪除用戶:

技術分享圖片

rename user ‘test02‘@‘localhost‘ to ‘user01‘@‘192.168.100.70‘; //用戶重命名:

技術分享圖片

select password(‘123123‘); //將密碼的明文轉化成密文:

技術分享圖片

create user ‘user01‘@‘localhost‘ identified by password ‘*E56A114692FE0DE073F9A1DD68A00EEB9703F3F1‘; //新創建用戶user01並制定密文密碼
set password for ‘user01‘@‘localhost‘ = password(‘123123‘); // 如果密碼忘了 可以重新更改密碼 :

技術分享圖片

使用MySQL時,如果忘記了其他用戶的密碼,可以使用root用戶重新設置,但是如果忘記了root密碼,就需要采取特殊的方法進行操作。這裏直接修改授權表可以修改root密碼,下面介紹它 的使用步驟:

[root@localhost bin]# systemctl stop mysqld.service //先關閉MySQL數據庫
[root@localhost bin]# netstat -ntap | grep 3306 //查看一下監聽端口

[root@localhost bin]# vim /etc/my.cnf //修改MySQL配置文件
在[mysqld]項插入 skip-grant-tables //插入skip-grant-tables 跳過驗證表
[root@localhost bin]# systemctl start mysqld.service //開啟MySQL數據庫
[root@localhost bin]# netstat -ntap | grep 3306 //查看監聽端口
登錄 mysql //然後直接mysql 就能登錄到數據庫中
update mysql.user set authentication_string = password(‘123123‘) where user=‘root‘; //更新數據庫信息 將root密碼改為123123
退出quit
[root@localhost bin]# vim /etc/my.cnf //然後再進入配置文件將剛才的skip-grant-tables刪掉
刪除 skip-grant-tables
[root@localhost bin]# systemctl restart mysqld.service //重啟服務
[root@localhost bin]# mysql -uroot -p //賬號、密碼登錄MySQL
Enter password: 123123

二、授權控制包括授予權限、查看權限、撤銷權限、權限列表說明等。

主要命令操作如下:

grant select,update on . to ‘user01"@"localhost‘ identified by ‘123123‘; //給用戶user01授予任意庫,組的select、update權限
語法:revoke 權限 on數據庫.表 from 用戶@主機;
revoke updtae on . from ‘user01’@’localhost’; //撤銷用戶user01任意庫,組的的updta的權限
show grants for "user01‘@‘localhost‘; // 查看用戶權限

MySQL日誌管理(錯誤日誌、通用查詢日誌、二進制日誌、慢查詢日誌)

接下來修改MySQL的配置文件,將以上四種日誌的配置文件插入到[mysqld]中:

[root@localhost bin]# cd /usr/local/mysql/data/ //mysql日誌存放位置
[root@localhost bin]# vim /etc/my.cnf // 將以下內容插入到[mysqld]中:
#錯誤日誌
log-error=/usr/local/mysql/data/mysql_error.log //在此路徑下定義錯誤日誌的存放位置、文件名
#通用日誌
general_log=ON //開啟???
general_log_file=/usr/local/mysql/data/mysql_general.log //指定日誌文件存放位置、文件名
#二進制日誌(記錄用戶對數據庫的操作)
log_bin=mysql-bin //指定二進制日誌
#慢日誌
slow_query_log=ON????????????????????????????????? //開啟???
slow_query_log_file=mysql_slow_query.log //指定日誌文件存放位置、文件名
long_query_time=1 //設置最長記錄時間
技術分享圖片

查看已經配置好的日誌文件:

技術分享圖片

錯誤日誌:

1.主要記錄當MySQL啟動或停止時,以及在運行過程中發生任何錯誤時的相關信息。錯誤日誌默認保存在MySQL的安裝路徑data文件夾下,後綴名是.err。
2.在MySQL的配置文件中,可以指定日誌文件的保存位置和日誌的文件名。log-error=file_name選項來指定保存錯誤日誌的位置,file_name 指定日誌文件名,如果沒有指定文件名,使用host_name.err作為文件名。重啟MySQL後生成mysql_error.log用來記錄錯誤日誌。

通用查詢日誌:

1.通用查詢日誌用來記錄MySQL的所有連接和語句,默認是關閉的。使用show語句可以查詢出日誌的信息。
2.修改MySQL配置文件的general_log=ON選項,可以打開通用查詢日誌,general_log_file=name定義通用查詢日誌的位置,如果沒有指定file_named的值,默認名是host_name.log。重啟MySQL後通用查詢日誌生效。
show variables like ‘general%‘; //查看通用日誌文件狀態:
技術分享圖片

二進制日誌:

1.二進制日誌用來記錄所有更新了數據或者已經潛在更新了數據的語句,記錄了數據的更改,主要目的是在恢復數據時能夠最大程度的恢復數據庫。二進制日誌默認是開啟的,在data文件夾下,以mysql-bin命名,數據量大時,它會自動分割成多個日誌文件,以數字做擴展名。
2.二進制日誌可以使用MySQL的工具mysqlbinlog查看二進制文件:
mysqlbinlog --no-defaults mysql-bin.000001 //5.7版本MySQL 查看二進制日誌文件
show variables like ‘log_bin%‘; //查看二進制日誌文件狀態(是否開啟):
技術分享圖片

慢查詢日誌:

1.慢查詢日誌記錄所有執行時間超過long_query_time秒的SQL語句,用於找到哪些查詢語句執行時間長,以便對其進行優化。默認慢查詢日誌是關閉的,slow_query_log是,慢查詢的選項,默認是OFF。
2.使用SQL語句開啟慢查詢功能。
3.慢查詢時間設置默認為10秒,記錄10秒內的查詢,可以通過global long_query_time選項進行修改。使用show語句查看慢查詢日誌。
show variables like ‘%slow%‘; //查看慢查詢日誌文件狀態(是否開啟):
技術分享圖片
show variables like ‘long_query_time‘; //查看最長記錄時間:
技術分享圖片
set global slow_query_log=ON; //開啟慢查詢日誌:
技術分享圖片
慢查詢測試:select sleep(6); //延遲6秒:
技術分享圖片
[root@localhost data]# vim mysql_slow_query.log //進入慢日誌文件查看記錄信息,可以看到相應的記錄。

數據亂碼解決方案

MySQL服務器使用中經常有亂碼產生,主要有以下幾種原因:

1.服務器系統字符設置問題
2.數據表語系設置的問題
3.客戶端連接語系的問題
總結:亂碼問題原因簡單解釋就是 在使用、存儲數據的時候,各個環節設置的字符集如果不同,就會產生亂碼。

解決方法:對於MySQL服務器,只要設置存儲的字符集為UTF-8,對應的客戶端程序也使用相同編碼,就不會產生亂碼。例如:create database chartest character set ‘utf8_general_ci‘; 在創建數據庫時使用參數character set設置字符集,collate是對字符集進行校隊的規則,字符集設置好後後續在庫中都是默認的UTF-8了。

本章總結:

1.MySQL新建用戶需要指定權限。

2.忘記root密碼,可以跳過權限表進行修改。

3.MySQL日誌包括錯誤日誌、通用查詢日誌、二進制日誌、慢速查詢日誌。

4.MySQL亂碼問題可以采用指定字符集UTF-8的方式解決。

詳解MySQL用戶與授權、MySQL日誌管理、數據亂碼解決方案。