1. 程式人生 > >詳解Mysql-5.7用戶管理、授權控制、日誌管理以及解決數據庫亂碼問題

詳解Mysql-5.7用戶管理、授權控制、日誌管理以及解決數據庫亂碼問題

pda 定時 權限 null 優化 修改 日誌功能 新建 erro

簡介

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表

技術分享圖片

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用戶管理、授權控制、日誌管理以及解決數據庫亂碼問題