- 用戶管理
1.1 作用
登錄
管理對(duì)象
1.2 長成什么樣?
用戶名@'白名單'
1.2.1 用戶名:
不要太長 , 和業(yè)務(wù)有關(guān)
emp_user01
grant all on *.* to wordpress@'%' identified '123';
1.2.2 白名單?
user@'10.0.0.56'
user@'%'
user@'10.0.0.%' 255.255.255.0 24位
user@'10.0.0.0/255.255.254.0' 23位
user@'10.0.0.5%' 50-59
user@'localhost' 本地
常用:
user@'10.0.0.%'
user@'10.0.0.0/255.255.254.0'
user@'10.0.0.5%' 50-59
user@'localhost' 本地
1.2.3 用戶管理
創(chuàng)建用戶:
mysql> CREATE USER oldguo@'10.0.0.%' IDENTIFIED BY '123';
查詢用戶:
mysql> select user,host from mysql.user;
mysql> select user,host,authentication_string from mysql.user;
修改用戶:
mysql> alter user oldguo@'10.0.0.%' identified by '123456';
刪除用戶:
mysql> drop user oldguo@'10.0.0.%';
說明:
8.0+ 版本: 必須先創(chuàng)建用戶再授權(quán).
8.0以前: 可以grant 授權(quán)時(shí)自動(dòng)創(chuàng)建用戶.
- 權(quán)限管理
2.1 MySQL權(quán)限列表
mysql> show privileges;
2.2 授權(quán)和回收權(quán)限
GRANT 權(quán)限 ON 權(quán)限作用范圍 TO 用戶 IDENTIFIED BY '123' with grant option;
權(quán)限 :
ALL :
Alter
Alter routine
Create
Create routine
Create temporary tables
Create view
Create user
Delete
Drop
Event
Execute
File
Grant option
Index
Insert
Lock tables
Process
Proxy
References
Reload
Replication client
Replication slave
Select
Show databases
Show view
Shutdown
Super
Trigger
Create tablespace
Update
Usage
權(quán)限作用范圍 :
. ====> 一般是管理員會(huì)設(shè)置的方法
oldguo.* ====> 一般是業(yè)務(wù)用戶會(huì)設(shè)置的方法
oldguo.t1 ====> 一般是業(yè)務(wù)用戶戶設(shè)置的方法
2.3 企業(yè)授權(quán)案例
(1)授權(quán)一個(gè)管理員用戶oldguo,可以從10網(wǎng)段任意地址登錄管理數(shù)據(jù)庫
GRANT ALL ON *.* TO oldguo@'10.0.0.%' IDENTIFIED BY '123' with grant option;
(2)授權(quán)一個(gè)業(yè)務(wù)用戶app,可以從10網(wǎng)段地址訪問app庫的所有表
grant select,update,insert,delete ON app.* TO app@'10.0.0.%' IDENTIFIED BY '123' ;
(3)授權(quán)一個(gè)開發(fā)用戶dev,可以對(duì)dev庫進(jìn)行業(yè)務(wù)開發(fā)
2.4 root管理員密碼忘記或被篡改如何處理?
(1) 關(guān)閉數(shù)據(jù)庫,啟動(dòng)到"單用戶"模式
[root@db01 data_3306]# systemctl stop mysqld
[root@db01 data_3306]# mysqld_safe --skip-grant-tables --skip-networking &
(2) 無密碼登錄MySQL
[root@db01 data_3306]# mysql
mysql> alter user root@'localhost' identified by '123456';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
mysql> flush privileges;
mysql> alter user root@'localhost' identified by '123456';
(3) 重啟數(shù)據(jù)庫到正常模式
[root@db01 data_3306]# systemctl restart mysqld
2.5 查詢用戶權(quán)限
mysql> show grants for app@'10.0.0.%';
2.6 回收權(quán)限
mysql> revoke delete,drop on app.* from 'app'@'10.0.0.%';
- MySQL的連接管理
3.1 自帶客戶端工具
3.1.1 mysql
-u 用戶名
-p 密碼
-h IP
-P 端口
-S socket位置
-e 免交互
< 導(dǎo)入SQL腳本
例子:
(1) TCP連接串遠(yuǎn)程登錄
注:需要提前創(chuàng)建好遠(yuǎn)程用戶
mysql> grant all on *.* to oldguo@'10.0.0.%' identified by '123';
[root@db01 data_3306]# mysql -uroot -p -h 10.0.0.51 -P 3306
(2) Socket連接方式
注:需要提前創(chuàng)建好localhost用戶
mysql> grant all on *.* to oldguo@'localhost' identified by '123';
[root@db01 data_3306]# mysql -uoldguo -p -S /tmp/mysql.sock
Enter password:
如何驗(yàn)證一個(gè)用戶是通過本地還是遠(yuǎn)程和登錄的.
show processlist;
(3) 免交互執(zhí)行命令
[root@db01 ~]# mysql -uroot -p -e "show processlist"
(4) 導(dǎo)入SQL腳本
[root@db01 ~]# mysql -uroot -p < t100w.sql
Enter password:
mysql> source /root/world.sql
3.1.2 mysqladmin
(1) 修改密碼
[root@db01 ~]# mysqladmin -uroot -p123456 password 123
[root@db01 ~]# mysql -uroot -p123
(2) 關(guān)閉數(shù)據(jù)庫
[root@db01 ~]# mysqladmin -uroot -p123 shutdown
mysqldump(備份恢復(fù))
3.2 第三方開發(fā)工具
sqlyog
navicat
workbench
3.3 應(yīng)用程序連接
php-mysql
pip3 install mysql
jar
go
- MySQL的啟動(dòng)關(guān)閉
systemctl ---> mysql.server start
-----> mysqld_safe ----> mysqld
- MySQL的初始化配置
5.1 初始化配置方法
源碼安裝定制 < 初始化配置文件 < 命令行啟動(dòng)時(shí)定制
5.2 初始化配置文件
[root@db01 data_3306]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
建議一個(gè)mysql實(shí)例一個(gè)配置文件
5.3 配置文件書寫格式
[root@db01 data_3306]# cat /etc/my.cnf
[mysqld]
user=mysql
port=3306
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3306
server_id=6
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
標(biāo)簽項(xiàng) ====> [mysqld]
服務(wù)器端 [server]: [mysqld],[mysqld_safe] ====> 影響到MySQL啟動(dòng)
客戶端 [clinet] : [mysql] ,[mysqldump] ====> 影響本地客戶端程序
配置項(xiàng) ====> key=value
5.4 自定制初識(shí)化配置文件位置
mysqld --defaults-file=/opt/a.cnf &
- 多實(shí)例的規(guī)劃和配置
分布式架構(gòu)中應(yīng)用廣泛
6.1 端口和目錄
rm -rf /data/mysql/data_{3307,3308,3309}
mkdir -p /data/mysql/data_{3307,3308,3309}
- 配置文件準(zhǔn)備
cat > /data/mysql/my3307.cnf <<EOF
[mysqld]
user=mysql
port=3307
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3307
server_id=7
socket=/tmp/mysql3307.sock
EOF
cat > /data/mysql/my3308.cnf <<EOF
[mysqld]
user=mysql
port=3308
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3308
server_id=8
socket=/tmp/mysql3308.sock
EOF
cat > /data/mysql/my3309.cnf <<EOF
[mysqld]
user=mysql
port=3309
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3309
server_id=9
socket=/tmp/mysql3309.sock
EOF
- 授權(quán)
[root@db01 ~]# chown -R mysql.mysql /data/
- 初始化數(shù)據(jù)
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3307
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3308
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3309
- 啟動(dòng)多實(shí)例
[root@db01 mysql]# mysqld --defaults-file=/data/mysql/my3307.cnf &
[root@db01 mysql]# mysqld --defaults-file=/data/mysql/my3308.cnf &
[root@db01 mysql]# mysqld --defaults-file=/data/mysql/my3309.cnf &
[root@db01 mysql]# netstat -tulnp
- 使用 systemd 管理多實(shí)例
cat >/etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/mysql/my3307.cnf
LimitNOFILE = 5000
EOF
cat >/etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/mysql/my3308.cnf
LimitNOFILE = 5000
EOF
cat >/etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql57/bin/mysqld --defaults-file=/data/mysql/my3309.cnf
LimitNOFILE = 5000
EOF
pkill mysqld
systemctl start mysqld3307
systemctl start mysqld3308
systemctl start mysqld3309
========================================
第三章 SQL 基礎(chǔ)
- SQL介紹
1.1 簡介
結(jié)構(gòu)化查詢語言.
1.2 SQL標(biāo)準(zhǔn)
SQL89 SQL92 SQL99 SQL03 SQL05
1.3 SQL_MODE
除數(shù)為零
日期
mysql> select @@sql_mode;
1.4 SQL 類型
DDL : 數(shù)據(jù)定義語言 : 庫名,庫屬性,表名,表屬性,列(列名,列屬性)
DCL : 數(shù)據(jù)控制語言 : 權(quán)限
DML : 數(shù)據(jù)操作語言 : 數(shù)據(jù)行
DQL : 數(shù)據(jù)查詢語言 : 數(shù)據(jù)行
1.5 SQL功能
管理,操作數(shù)據(jù)庫對(duì)象:
庫: 庫名,庫屬性
表: 表名,表屬性,列(列名,列屬性),數(shù)據(jù)行
- MySQL規(guī)范性存儲(chǔ)限制
2.1 字符集Charset
utf8 : 最大字節(jié)長度3個(gè).
utf8mb4 : 最大字節(jié)長度4個(gè). 可以存儲(chǔ)emoji表情字符.
mysql> show charset;
2.2 排序規(guī)則 (校對(duì)規(guī)則)
show collation;
默認(rèn)是大小寫不敏感.
utf8mb4_general_ci
utf8mb4_bin
2.3 數(shù)據(jù)類型
2.3.1 數(shù)字類型
tinyint 1字節(jié)長度數(shù)字 ===> 11111111 ===> 0-2^8-1 ===> -27-27-1 (3位)
int 4字節(jié)長度 ====> 0-2^32-1 ====> -2^31 - 2^31-1 (10位數(shù))
bigint 8字節(jié)長度 ====> 0-2^64-1 ====> -2^63 - 2^63-1 (20位數(shù))
2.3.2 字符串
char(10) : 定長類型,最多10個(gè)字符,占用存儲(chǔ)空間一定.最多存儲(chǔ)255個(gè)字符.
varchar(10):
變長類型,最多10個(gè)字符,按需分配存儲(chǔ)空間.
需要額外1個(gè)字符或2個(gè)字符存儲(chǔ)字符長度
因素: 變長的字符串列,90%幾率都是varchar
具體原因是什么?
節(jié)省空間,還有沒有別的原因?
遺留的問題..
enum('m','f')
1 2
2.3.3 時(shí)間類型
DATETIME
范圍為從 1000-01-01 00:00:00.000000 至 9999-12-31 23:59:59.999999。
TIMESTAMP
1970-01-01 00:00:00.000000 至 2038-01-19 03:14:07.999999。
timestamp會(huì)受到時(shí)區(qū)的影響
2.3.4 二進(jìn)制類型
2.3.5 JSON(8.0)