補(bǔ):
數(shù)據(jù)初始化 (建系統(tǒng)庫) ---(不安全的初始化方式迁客,會生成一個隨機(jī)登錄數(shù)據(jù)庫密碼檀何。登錄時必須修改密碼才能登錄)
[root@db01 data_3306]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/mysql/data_3306
5.7 以前版本初始化方式:
/usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/mysql/data_3306
show processlist; #查看當(dāng)前線程用戶登錄數(shù)量
SQL層
1. 語法
2. 語義
3. 權(quán)限
4. 解析 ---> 執(zhí)行計劃
5. 預(yù)處理 ---> 代價計算(cost)
6. 優(yōu)化器 ---> 選擇代價低的
7. 執(zhí)行器 ---> 結(jié)果----> 段--->區(qū)---->頁
查詢QC(query_cache) #將解析、預(yù)處理践付、優(yōu)化器等重復(fù)操作保存在緩存中秦士,提高效率。
day 2 第二章MySQL 基礎(chǔ)管理
1.用戶管理
登錄
管理對象
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' 本地
1.2.3 常用
user@'10.0.0.%'
user@'10.0.0.0/255.255.254.0'
user@'10.0.0.5%' 50-59
user@'localhost' 本地
創(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 oldzhang@'10.0.0.%';
ps: 8.0+ 版本必須先創(chuàng)建用戶再授權(quán)永高。
8.0以前版本授權(quán)時同時可以創(chuàng)建用戶隧土。
2.權(quán)限管理
2.1 MySQL權(quán)限列表
mysql> show privileges; #權(quán)限清單
2.2 # 權(quán)限語法格式
GRANT 權(quán)限 ON 權(quán)限作用范圍 TO 用戶 IDENTIFIED BY '123' with grant option;
權(quán)限作用范圍 :
*.* ====> 一般是管理員會設(shè)置的方法
oldguo.* ====> 一般是業(yè)務(wù)用戶會設(shè)置的方法
oldguo.t1 ====> 一般是業(yè)務(wù)用戶戶設(shè)置的方法 (具體到那個表)
2.3 企業(yè)授權(quán)案例
(1)授權(quán)一個管理員用戶oldguo,可以從10網(wǎng)段任意地址登錄管理數(shù)據(jù)庫
GRANT ALL ON *.* TO oldguo@'10.0.0.%' IDENTIFIED BY '123' with grant option;
(2)授權(quán)一個業(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)一個開發(fā)用戶dev,可以對dev庫進(jìn)行業(yè)務(wù)開發(fā)(開發(fā)的權(quán)限一般為除了server admin之外的)
2.4 root管理員密碼忘記或被篡改如何處理?
(1) 關(guān)閉數(shù)據(jù)庫,啟動到"單用戶"模式
[root@db01 data_3306]# systemctl stop mysqld
[root@db01 data_3306]# mysqld_safe --skip-grant-tables --skip-networking & #--skip-networking關(guān)閉遠(yuǎn)程tcp連接(不提供端口號)只從本地登錄 --skip-grant-tables 不開啟驗證模塊
(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; #手動將用戶授權(quán)表加載到系統(tǒng)內(nèi)存中
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 oldshun@'10.0.0.%';
2.6 回收權(quán)限
mysql> revoke delete,drop on *.* from 'oldshun'@'10.0.0.%';
3. 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:
如何驗證一個用戶是通過本地還是遠(yuǎn)程和登錄的.
show processlist;
(3) 免交互執(zhí)行命令
[root@db01 ~]# mysql -uroot -p -e "show processlist"
Enter password:
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+------+-----------+------+---------+------+----------+------------------+
| 5 | root | localhost | NULL | Query | 0 | starting | 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
4. MySQL的啟動關(guān)閉
systemctl ---> mysql.server start
-----> mysqld_safe ----> mysqld
5.1 初始化配置方法
源碼安裝定制 < 初始化配置文件 < 命令行啟動時定制(優(yōu)先級最高)
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
先調(diào)用/etc/my.cnf 再調(diào)用/etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 后面會復(fù)制前面
建議一個mysql實例一個配置文件
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)簽項 ====> [mysqld]
服務(wù)器端 [server]: [mysqld],[mysqld_safe] ====> 影響到MySQL啟動
客戶端 [clinet] : [mysql] ,[mysqldump] ====> 影響本地客戶端程序
配置項 ====> key=value
5.4 自定制初識化配置文件位置
[root@db01 ~]# cat /opt/a.cnf
[mysqld]
user=mysql
port=3306
basedir=/usr/local/mysql57
datadir=/data/mysql/data_3306
server_id=6
socket=/tmp/a.sock
[root@db01 ~]# pkill mysqld
[root@db01 ~]# mysqld --defaults-file=/opt/a.cnf & #啟動數(shù)據(jù)庫的方式
[root@db01 ~]# mysql -S /tmp/a.sock
6. 多實例的規(guī)劃和配置
分布式架構(gòu)中應(yīng)用廣泛
6.1 端口和目錄
mkdir -p /data/mysql/data_{3307,3308,3309}
2. 配置文件準(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
3. 授權(quán)
[root@db01 ~]# chown -R mysql.mysql /data/
4. 初始化數(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
5. 啟動多實例
[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
6. 使用 systemd 管理多實例
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ǔ)
1. 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ù)庫對象:
庫: 庫名,庫屬性
表: 表名,表屬性,列(列名,列屬性),數(shù)據(jù)行
2. MySQL規(guī)范性存儲限制
2.1 字符集 utf8 utf8mb4
utf8: 最大字符長度3個 ,其中中文三個字符
utf8mb4 : 最大字節(jié)長度4個. 可以存儲emoji表情字符.
2.2
# mysql 中支持的字符集
mysql> show charset;
# mysql 中的排序規(guī)則
show collation; #校對規(guī)則
默認(rèn)是大小寫不敏感.
2.3 數(shù)據(jù)類型
2.3.1 數(shù)字類型
tinyint(按需分派長度) 1字節(jié)長度數(shù)字=8字符 ===> 11111111 ===> 0-2^8-1 ===> -2^7-2^7-1 (3位)
int 4字節(jié)長度=32字節(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個字節(jié),占用存儲空間一定.最多存儲255個字符.
varchar(10):
變長類型,最多10個字符,按需分配存儲空間.
需要額外1個字符或2個字符存儲字符長度
因素: 變長的字符串列,90%幾率都是varchar
具體原因是什么?
節(jié)省空間,還有沒有別的原因?
遺留的問題..
enum('m','f'):枚舉類型
1 2
2.3.3 時間類型
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會受到時區(qū)的影響