詳解Mysql-5.7用戶管理、授權控制、日誌管理以及解決數據庫亂碼問題
1、用戶管理
2、授權控制
3、日誌管理
4、解決數據亂碼問題
實驗環境
- 系統環境:centos7.4
- 宿主機IP地址:192.168.100.71
- yum掛載目錄:/mnt/sr0
命令步驟
一、用戶管理
[root@redhat7_1 ~]# mysql -uroot -p123 #登陸Mysql
1、新建用戶
mysql> create user ‘t01‘@‘localhost‘ identified by ‘123‘;
#創建"t01"用戶,賦予密碼為"123",並且只允許在本機登陸
t01:#創建的用戶名稱
@:#代表分隔符
localhost:#代表允許在哪臺主機登陸,值可為網段,也可為"%"代表任意主機
identified by:#設置的密碼
2、查看新建用戶位置
mysql> show databases; #查看數據庫
mysql> use mysql; #進入mysql數據庫
3、重命名用戶
mysql> rename user ‘t01‘@‘localhost‘ to ‘u01‘@‘192.168.100.0/24‘;#將"t01"用戶修改為"u01",並且將允許登陸的主機"localhost"主機改為"192.168.100.0/24"網段
mysql> select user,host,authentication_string from mysql.user; #查看user表
![技術分享圖片](http://i2.51cto.com/images/blog/201808/29/c4b4fdaef6f193fe0ad0c1b66cb28e8c.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
4、刪除用戶
mysql> drop user ‘u01‘@‘192.168.100.0/24‘; #刪除"u01"用戶
mysql> select user,host,authentication_string from mysql.user #再次查看user表
5、設置加密密碼
mysql> select password(‘123‘);
mysql> create user ‘luxiaofeng‘@‘localhost‘ identified by *‘23AE809DDACAF96AF0FD78ED04B6A265E05AA257‘**; #重新創建用戶,將密碼復制添加進去
mysql> select user,host,authentication_string from mysql.user
mysql> select user,host,authentication_string from user;
6、修改密碼
mysql> set password for ‘luxiaofeng‘@‘localhost‘ =password(‘123321‘);#修改密碼為"123321"
mysql> update mysql.user set authentication_string=‘777777‘ where user=‘luxiaofeng‘; #密碼修改為"777777"
二、授權管理
權限列表
權限 | 權限級別 | 權限說明 |
---|---|---|
CREATE | 數據庫、表或索引 | 創建數據庫、表或索引權限 |
DROP | 數據庫或表 | 刪除數據庫或表權限 |
GRANT OPTION | 數據庫、表或保存的程序 | 賦予權限選項 |
REFERENCES | 數據庫或表 | |
ALTER | 表 | 更改表,比如添加字段、索引等 |
DELETE | 表 | 刪除數據權限 |
INDEX | 表 | 索引權限 |
INSERT | 表 | 插入權限 |
SELECT | 表 | 查詢權限 |
UPDATE | 表 | 更新權限 |
CREATE VIEW | 視圖 | 創建視圖權限 |
SHOW VIEW | 視圖 | 查看視圖權限 |
ALTER ROUTINE | 存儲過程 | 更改存儲過程權限 |
CREATE ROUTINE | 存儲過程 | 創建存儲過程權限 |
EXECUTE | 存儲過程 | 執行存儲過程權限 |
FILE | 服務器主機上的文件訪問 | 文件訪問權限 |
CREATE TEMPORARY TABLES | 服務器管理 | 創建臨時表權限 |
LOCK TABLES | 服務器管理 | 鎖表權限 |
CREATE USER | 服務器管理 | 創建用戶權限 |
PROCESS | 服務器管理 | 查看進程權限 |
RELOAD | 服務器管理 | 執行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的權限 |
REPLICATION CLIENT | 服務器管理 | 復制權限 |
REPLICATION SLAVE | 服務器管理 | 復制權限 |
SHOW DATABASES | 服務器管理 | 查看數據庫權限 |
SHUTDOWN | 服務器管理 | 關閉數據庫權限 |
SUPER | 服務器管理 | 執行kill線程權限 |
1、賦予權限
mysql> grant all on . to ‘luxiaofeng‘@‘localhost‘ identified by ‘123‘;
解析:
all:所有權限
*:第一個"*"代表對應的數據庫
*:第二個"*"代表對應的數據表
luxiaofeng:賦予權限的用戶
@:分隔符
localhost:允許在哪臺主機上登陸
identified by:設置密碼
[root@redhat7_1 ~]# mysql -u luxiaofeng -p123
2、查看權限
mysql> show grants for ‘luxiaofeng‘@‘localhost‘;
3、撤銷權限
[root@redhat7_1 ~]# mysql -uroot -p123 #使用"root"身份進行登陸
mysql> revoke all on . from ‘luxiaofeng‘@‘localhost‘; #撤銷"luxiaofeng"用戶的所有權限
mysql> show grants for ‘luxiaofeng‘@‘localhost‘;
三、日誌管理
1、錯誤日誌
包含了當mysqld啟動和停止時,以及服務器在運行過程中發生任何錯誤時的相關信息
[root@redhat7_1 ~]# cd /usr/local/mysql/data/
[root@redhat7_1 ~]# ls
[root@redhat7_1 ~]# vim /etc/my.cnf #修改主配置文件
在[mysqld]選項中添以下參數:
log-error=/usr/local/mysql/data/mysql_error.log #指定日誌路徑
[root@redhat7_1 data]# systemctl restart mysqld.service #重啟服務
[root@redhat7_1 data]# ls
2、通用查詢日誌
MySQL所有連接以及語句被記錄到的日誌文件。註意這種日誌就是用來記錄在MySQL上執行過的SQL語句,包括DDL和DML以及特殊命令如SET,而不僅僅是select語句。
[root@redhat7_1 ~]# vim /etc/my.cnf
在[mysqld]選項中添以下參數:
general_log=ON #開啟通用查詢日誌
general_log_file=/usr/local/mysql/data/mysql_general.log #指定日誌路徑
[root@redhat7_1 ~]# systemctl restart mysqld.service
[root@redhat7_1 ~]# ls /usr/local/mysql/data/
3、二進制日誌
包含了所有更新了數據或者已經潛在更新了數據的所有語句,記錄了數據的更改,其主要目的是在恢復數據時能夠最大可能地恢復數據庫。
[root@redhat7_1 ~]# vim /etc/my.cnf
在[mysqld]選項中添以下參數:
log_bin=mysql-bin #開啟二進制日誌功能
[root@redhat7_1 ~]# systemctl restart mysqld.service
[root@redhat7_1 ~]# ls /usr/local/mysql/data/
mysql> create table student(id int not null primary key auto_increment,name varchar(10),score decimal(5,2)); #新建一張"student"表
mysql> insert into student(name,score) values(‘zhangsan‘,90); #添加數據
mysql> insert into student(name,score) values(‘lisi‘,95);
mysql> insert into student(name,score) values(‘wangwu‘,96);
mysql> quit;
[root@redhat7_1 ~]# cd /usr/local/mysql/data/ #日誌目錄下
[root@redhat7_1 data]# mysqlbinlog --no-defaults mysql-bin.000002 #查看二進制文件
4、慢速查詢日誌
記錄所有執行事件超過long_query_time秒的SQL語句。long_query_time:超時可用於找到執行時間長的查詢,以用於優化。
[root@redhat7_1 ~]# vim /etc/my.cnf
在[mysqld]選項中添以下參數:
slow_query_log=ON #開啟慢速查詢日誌
slow_query_log_file=/usr/local/mysql/data/mysql_slow.log #指定日誌路徑
long_query_time=5 #設置超時時間,單位秒,超出設定時間,記為慢
[root@redhat7_1 ~]# systemctl restart mysqld.service
[root@redhat7_1 ~]# ls /usr/local/mysql/data/
[root@redhat7_1 ~]# mysql -u root -p123 #登陸mysql
mysql> select sleep(6);
[root@redhat7_1 ~]# cat /usr/local/mysql/data/mysql_slow.log
四、解決數據亂碼問題
法一:修改配置文件法
[root@redhat7_1 ~]# vim /etc/my.cnf
在[client]、[mysqld]中添加相應字符集:
[client]
defaults-character-set=utf8
[msyqld]
character_set_server=utf8
法二:創建庫、表指定字符集
[root@redhat7_1 ~]# mysql -u root -p123
mysql> create database auth default character set utf8 collate utf8_general_ci; #創建庫
mysql> use auth;
mysql> create table users(user_name CHAR(16) NOT NULL,user_passwd CHAR(48) DEFAULT ‘‘,PRIMARY KEY(user_name))ENGINE=InnoDB DEFAULT CHARSET=utf8; #創建表
mysql> desc users;
詳解Mysql-5.7用戶管理、授權控制、日誌管理以及解決數據庫亂碼問題