數(shù)據(jù)庫(kù)學(xué)習(xí)day02:多實(shí)例部署及MySQL簡(jiǎn)單配置管理及列屬性

跨版本升級(jí)

注意事項(xiàng) 1.不要跨多個(gè)版本 2.看好版本

開(kāi)發(fā)私下找你要root管理員權(quán)限

銀行:
走流程.一般需要審核,背景調(diào)查.
舉報(bào)他.
中小公司:
權(quán)利和責(zé)任全給他,通過(guò)正常的流程.

思考: 開(kāi)發(fā)找你開(kāi)權(quán)限的流程是怎樣?

(1) 郵件申請(qǐng)
(2) 權(quán)限
(3) 從哪來(lái)
(5) 業(yè)務(wù)庫(kù)
(6) 誰(shuí)來(lái)審批

grant 權(quán)限 on 權(quán)限范圍 to 用戶@'dizhi' identified by '密碼';

1. MySQL的連接管理

1.1 MySQL Linux 連接協(xié)議

Socket : 本地登錄,提前創(chuàng)建好localhost相關(guān)用戶
TCP/IP : 遠(yuǎn)程登錄,提前創(chuàng)建好 遠(yuǎn)程用戶.

1.2 MySQL客戶端

兩種連接方式
[root@db01 ~]#mysql -uroot -p -S /tmp/mysql.sock
[root@db01 ~]#mysql -udamao -p -h10.0.0.51 -P3306

注意:

 1.  不要連接時(shí)把密碼寫到命令行上
 2.  脫敏 敏感數(shù)據(jù)進(jìn)行打碼處理

Windows連接數(shù)據(jù)庫(kù)

利用軟件實(shí)現(xiàn)
sqlyog
navicat

2. MySQL的啟動(dòng)關(guān)閉

2.1 利用Sys-V的方式啟動(dòng)

service mysqld start/stop/restart/status

2.2 利用systemd的管理程序啟動(dòng)

systemctl start/stop/restart/status mysqld

2.3 手動(dòng)啟動(dòng)方式(維護(hù)性操作時(shí))

注意:無(wú)論是sys-V還是systemd的方式啟動(dòng),最后都是調(diào)用的MySQL服務(wù)端的mysqld這個(gè)二進(jìn)制命令啟動(dòng)程序

image.png

#sys-V
/etc/init.d/mysqld -----> /usr/local/mysql/bin/mysqld_safe  ----> /usr/local/mysql/bin/mysqld

#systemd
[root@db01 ~]#systemctl cat mysqld.service 
# /etc/systemd/system/mysqld.service
[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=/application/mysql/bin/mysqld--defaults-file=/etc/my.cnf
LimitNOFILE = 5000
[root@db01 ~]#

\color{red}{我是紅色}

例子:管理員用戶root@'localhost',密碼丟失
(1)通過(guò)跳過(guò)授權(quán)表參數(shù)+TCP/IP的參數(shù),啟動(dòng)數(shù)據(jù)庫(kù)

--skip-grant-tables   : 跳過(guò)授權(quán)表,連接層關(guān)閉驗(yàn)證模塊.
--skip-networking     : 關(guān)閉連接層TCP/IP,只留socket文件連接

(2)無(wú)密碼登錄到MySQL
(3)修改密碼

damao[(none)]>alter user root@'localhost' identified by '123';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

#發(fā)現(xiàn)更改不了密碼,因?yàn)樘^(guò)了授權(quán)表,所以無(wú)法更改密碼,需要手動(dòng)刷新將授權(quán)表加載到內(nèi)存中,再更改密碼。

damao[(none)]>flush privileges;
Query OK, 0 rows affected (0.05 sec)

damao[(none)]>alter user root@'localhost' identified by '123';
Query OK, 0 rows affected (0.00 sec)

damao[(none)]>

(4)將數(shù)據(jù)庫(kù)pkill,再正常啟動(dòng)數(shù)據(jù)庫(kù)。

2.5MySQL的其他關(guān)閉方式

[root@db01 ~]#mysqladmin -uroot -p -S /tmp/mysql.sock shutdown
Enter password: 
2019-11-12T12:47:05.079904Z mysqld_safe mysqld from pid file /data/mysql/data/db01.pid ended
[1]+  Done                    mysqld_safe --skip-grant-tables --skip-networking
[root@db01 ~]#

初始化配置

3.0 初始化配置方式 配置生效的優(yōu)先級(jí)

(1) 配置文件 *****
(2) 命令行 ***
(3) 編譯安裝 *

3.1 配置文件默認(rèn)讀取數(shù)據(jù)

[root@db01 ~]#mysqld --help --verbose|grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf 
                      my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
**配置文件的讀取是依照上面列出的順序依次讀取,配置參數(shù)相同但是參數(shù)值不同時(shí),最后讀取的文件的配置生效,配置參數(shù)不同,依次累加。**

自己定義的默認(rèn)配置
利用mysqld_safe或mysqld命令啟動(dòng)數(shù)據(jù)庫(kù),或者更改systemd管理的配置文件
使用參數(shù) --defaults-file=配置文件路徑
mysqld_safe --defaults-file=/tmp/my.cnf

3.2 配置文件內(nèi)容

3.2.1 影響范圍

服務(wù)端啟動(dòng)和工作
本地客戶端連接(socket)

3.2.2 內(nèi)容結(jié)構(gòu)

[root@db01 ~]#cat /etc/my.cnf
[mysqld]
user=mysql
basedir=/application/mysql
datadir=/data/mysql/data
log_error=/data/mysql/mysql.log
socket=/tmp/mysql.sock
port=3306
server_id=51
log_bin=/data/binlog

[mysql]
socket=/tmp/mysql.sock
prompt=damao[\\d]>

[標(biāo)簽]
配置項(xiàng)=xxxx

標(biāo)簽類型:服務(wù)端、客戶端
服務(wù)器端標(biāo)簽:
[mysqld]
[mysqld_safe]
[server]

客戶端標(biāo)簽:
[mysql]
[mysqldump]
[client]

4. 多實(shí)例

4.1 規(guī)劃

(1) 端口 : 3307,3308,3309 
(2) 數(shù)據(jù) : /data/330{7..9}/data 
(3) 配置文件: 
/data/330{7..9}/my.cnf  
port=3307/3308/3309
server_id=7/8/9
datadir=/data/330{7..9}/data socket=/tmp/mysql330{7..9}.sock 

4.2 進(jìn)行操作

(1)創(chuàng)建相關(guān)目錄
mkdir -p /data/330{7..9}/data
(2)初始化數(shù)據(jù)
[root@db01 /data]# mv /etc/my.cnf /tmp #將默認(rèn)配置文件移走
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data
(3)準(zhǔn)備配置文件

cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/binlog
EOF

cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/binlog
EOF

cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/app/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/binlog
EOF

(4)準(zhǔn)備啟動(dòng)腳本

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/mysql/bin/mysqld --defaults-file=/data/3307/my.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/mysql/bin/mysqld --defaults-file=/data/3308/my.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/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF

(5)啟動(dòng)多實(shí)例及驗(yàn)證
systemctl start mysql3307.service

[root@db01 ~]#netstat -lntup|grep mysqld
tcp6       0      0 :::3307                 :::*                    LISTEN      10327/mysqld        
tcp6       0      0 :::3308                 :::*                    LISTEN      10361/mysqld        
tcp6       0      0 :::3309                 :::*                    LISTEN      10395/mysqld

\color{red}{**小作業(yè)**:} 利用mysql_multi 實(shí)現(xiàn)多實(shí)例環(huán)境
參考 : https://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html
(1)準(zhǔn)備環(huán)境

mkdir /data/330{4,5}/data -p
chown -R mysql. /data/330{4,5}

(2)初始化數(shù)據(jù)

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3304/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3305/data

(3)配置/etc/my.cnf 文件

[root@db01 ~]#cat /etc/my.cnf
[mysql_multi]
mysqld = /application/mysql/bin/mysqld
mysqladmin = /application/mysql/bin/mysqladmin
log = /data/mysqld_multi.log
user = root
pass = 123

 
[mysqld3304]
user = mysql
mysqladmin = /application/mysql/bin/mysqladmin
mysqld = /application/mysql/bin/mysqld
port = 3304
socket = /tmp/mysql3304.sock
datadir = /data/3304/data
log_error=/data/3304/mysql.log
server-id = 51
 
[mysqld3305]
user = mysql
mysqladmin = /application/mysql/bin/mysqladmin
mysqld = /application/mysql/bin/mysqld
port = 3305
socket = /tmp/mysql3305.sock
log_error=/data/3305/mysql.log
datadir = /data/3305/data
server-id = 52

(4)啟動(dòng)并查看狀態(tài)

[root@db01 ~]#mysqld_multi start  3305 
WARNING: Log file disabled. Maybe directory or file isn't writable?
mysqld_multi log file version 2.16; run: Tue Nov 12 23:50:37 2019

Starting MySQL servers
[root@db01 ~]#mysqld_multi start  3304
WARNING: Log file disabled. Maybe directory or file isn't writable?
mysqld_multi log file version 2.16; run: Tue Nov 12 23:50:41 2019

Starting MySQL servers
[root@db01 ~]#mysqld_multi report  3304,3305
WARNING: Log file disabled. Maybe directory or file isn't writable?
mysqld_multi log file version 2.16; run: Tue Nov 12 23:50:57 2019
Reporting MySQL servers
MySQL server from group: mysqld3304 is running
MySQL server from group: mysqld3305 is running
[root@db01 ~]#netstat -lntup|grep mysqld
tcp6       0      0 :::3304                 :::*                    LISTEN      9628/mysqld         
tcp6       0      0 :::3305                 :::*                    LISTEN      9594/mysqld         
tcp6       0      0 :::3306                 :::*                    LISTEN      9002/mysqld

登錄時(shí)指定socket文件
mysql -uroot -p -S /tmp/mysqld3304.sock

第三章 SQL基礎(chǔ)應(yīng)用&元數(shù)據(jù)獲取

1. SQL介紹

Structured Query Language 結(jié)構(gòu)化查詢語(yǔ)言,關(guān)系型數(shù)據(jù)庫(kù)中通用的一種命令.
使用SQL_MODE規(guī)范SQL語(yǔ)句的語(yǔ)法標(biāo)準(zhǔn)

2. SQL_MODE 規(guī)范SQL語(yǔ)句,確保數(shù)據(jù)有意義

damao[(none)]>damao[(none)]>select @@sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@sql_mode                                                                                                                                |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
NO_ZERO_IN_DATE   時(shí)間不能為零 0年0月0分....
ERROR_FOR_DIVISION_BY_ZERO   除數(shù)(分母)不能為零

3. SQL常用分類

DDL:Data Definition Language           數(shù)據(jù)定義語(yǔ)言
DCL:Data Control Language               數(shù)據(jù)控制語(yǔ)言
DML:Data Manipulation Language      數(shù)據(jù)操作語(yǔ)言
DQL:Data Query Language                 數(shù)據(jù)查詢語(yǔ)言

4. 字符集及校對(duì)規(guī)則介紹

utf8    :  最多允許字符長(zhǎng)度為3個(gè)字節(jié)
utf8mb4 :  最多允許字符長(zhǎng)度為4個(gè)字節(jié)
gbk     :  

查看數(shù)據(jù)庫(kù)中支持的字符集
damao[(none)]>show charset;
校對(duì)規(guī)則:排序規(guī)則 (是否區(qū)分大小寫)

AbCD 
ABCD 
mysql> show collation;

\color{red}{說(shuō)明:可以作用于庫(kù)級(jí)別和表級(jí)別.一般是在建庫(kù)建表時(shí)設(shè)定}

5. 表的屬性和列的屬性

5.1 表定義屬性

(1)存儲(chǔ)引擎:InnoDB
(2)字符集&校對(duì)規(guī)則:utf8mb4
(3)表注釋

5.2 列的屬性

5.2.1 數(shù)據(jù)類型

保證數(shù)據(jù)有意義(保證數(shù)據(jù)的準(zhǔn)確性和標(biāo)準(zhǔn)性。)

(1)數(shù)值類型

image.png

image.png

tinyint : 1Bytes=8bit -128~127 , 0-255 .最多存儲(chǔ)1個(gè)字節(jié)長(zhǎng)度數(shù)字 
int     : 4Bytes, 0-2^32,-2^31~2^31-1,10位數(shù)
bigint  : 8Bytes, 0-2^64,-2^63~2^63-1,20位數(shù)

(2) 字符串類型(萬(wàn)能)

image.png

一個(gè)漢字占多少長(zhǎng)度與編碼有關(guān):
UTF-8:一個(gè)漢字=3個(gè)字節(jié)
GBK:一個(gè)漢字=2個(gè)字節(jié)

#char(64)        :  括號(hào)中最大的字符長(zhǎng)度        255字節(jié) utf8字符集最多存儲(chǔ)85個(gè)漢字
定長(zhǎng)的字符串類型,一次性分配固定長(zhǎng)度存儲(chǔ)空間,存不滿,用空字符串填充

#varchar(64) :變長(zhǎng)的字符類型, 按需分配存儲(chǔ)空間.
65535字節(jié),最多65533. 
1-255字符之間,單獨(dú)占用1字節(jié)存儲(chǔ)字符長(zhǎng)度.
256-65535字符長(zhǎng)度,單獨(dú)占用2字節(jié)存儲(chǔ)字符長(zhǎng)度

#enum('山東省','河北省','北京市','上海市'......) :  枚舉類型
        0     1         2        3 
枚舉類型,比較適合于將來(lái)此列的值是固定范圍內(nèi)的特點(diǎn),可以使用enum,可以很大程度的優(yōu)化我們的索引結(jié)構(gòu)。
注意: 數(shù)字列不要使用,經(jīng)常變化的列不要使用

區(qū)別 :
char(64)  varchar(64)
1. 定長(zhǎng)  和 變長(zhǎng) 
2. 64代表了,最多可以存儲(chǔ)字符的個(gè)數(shù)
3. 字節(jié)限制 255 , 65535字節(jié)
5. varchar 需要花費(fèi)額外的1-2字節(jié)存儲(chǔ)字符長(zhǎng)度

如何選擇char或varchar

1. 業(yè)務(wù)數(shù)據(jù)是定長(zhǎng)還是變長(zhǎng)
2. 字符長(zhǎng)度
懸念:
大表:  數(shù)據(jù)類型選擇是否會(huì)影響到查詢效率?
會(huì).為什么? 

(3)時(shí)間類型

image.png

image.png

datetime   
timestamp

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ū)的影響

(5) 二進(jìn)制類型 (略)
(6) Json類型(8.0以后支持的比較好)

5.2.2 約束

not null   非空約束  列不能為空
unique key 唯一約束  列的值不能重復(fù)
primary key 主鍵約束(非空且唯一),一張表只能有一個(gè),一般是ID列
unsigned  非負(fù)數(shù)  數(shù)據(jù)類型約束

5.2.3 其他屬性

auto_increment  自增長(zhǎng),數(shù)值默認(rèn)遞增
default         默認(rèn)值
comment         注釋
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容