03--mysql軟體基本管理 ;mysql建立多例項
阿新 • • 發佈:2021-07-01
目錄
一、mysql軟體基本管理
1.啟動檢視
[root@db01 ~]# systemctl start mysql #啟動 [root@db01 ~]# systemctl enable mysql #設定開機自啟動. [root@db01 ~]# ps aux |grep mysqld |grep -v grep #檢視程序,mysqld_safe為啟動mysql的指令碼檔案,內部呼叫mysqld命令 mysql 3329 0.0 0.0 113252 1592 ? Ss 16:19 0:00 /bin/sh /usr/bin/mysqld_safe --basedir=/usr mysql 3488 0.0 2.3 839276 90380 ? Sl 16:19 0:00 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-error=/var/log/mariadb/mariadb.log --pid-file=/var/run/mariadb/mariadb.pid --socket=/var/lib/mysql/mysql.sock [root@db01 ~]# netstat -an |grep 3306 #檢視埠 tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN [root@db01 ~]## ll -d /var/lib/mysql #許可權不對,啟動不成功,注意user和group drwxr-xr-x 5 mysql mysql 4096 Jul 20 16:28 /var/lib/mysql
2.登入,設定密碼
初始狀態下,管理員root,密碼為空,預設只允許從本機登入localhost 設定密碼 [root@egon ~]# mysqladmin -uroot password "123" 設定初始密碼 由於原密碼為空,因此-p可以不用 [root@egon ~]# mysqladmin -uroot -p"123" password "456" 修改mysql密碼,因為已經有密碼了,所以必須輸入原密碼才能設定新密碼 命令格式: [root@egon ~]# mysql -h172.31.0.2 -uroot -p456 [root@egon ~]# mysql -uroot -p [root@egon ~]# mysql 以root使用者登入本機,密碼為空
3.忘記密碼
#啟動時,加一條配置跳過授權庫 [root@db01 ~]# vim /etc/my.cnf #mysql主配置檔案 [mysqld] skip-grant-table [root@db01 ~]# systemctl restart mysql [root@db01 ~]# mysql mysql [(none)]> update mysql.user set password=password("1") where user="root" and host="localhost"; mysql [(none)]> flush privileges; mysql [(none)]> \q [root@db01 ~]# #開啟/etc/my.cnf去掉skip-grant-table,然後重啟 [root@db01 ~]# systemctl restart mysql [root@db01 ~]# mysql -u root -p123 #以新密碼登入
4.統一字元編碼
#1. 修改配置檔案
[root@db01 ~]# vim /etc/my.cnf
[mysqld]
default-character-set=utf8
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
#mysql5.5以上:修改方式有所改動
[root@db01 ~]# vim /etc/my.cnf
... ...
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
#原始碼包安裝的my.cnf(sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES)與
[mysql]
default-character-set=utf8mb4 有衝突,我就刪了
#2. 重啟服務
#3. 檢視修改結果:
\s
show variables like '%char%'
二、mysql體系結構管理
1.客戶端與伺服器模型
1)mysql是一個典型的C/S服務結構
1.mysql自帶的客戶端程式(/service/mysql/bin)
mysql
mysqladmin
mysqldump
2.mysqld一個二進位制程式,後臺的守護程序
單程序
多執行緒
2)MySQL的兩種連線方式
1.TCP/IP的連線方式
2.套接字連線方式,socket連線
#檢視連線方式
mysql> status;
--------------
Connection: Localhost via UNIX socket
3.舉例:
3.1.TCP/IP連線
mysql -uroot -p -h127.0.0.1
mysql -uroot -p -h127.0.0.1 -S /tmp/mysql.sock
3.2.socket連線
mysql -uroot -p -hlocalhost
mysql -uroot -p123(預設連線方式,socket)
4.注意:
4.1.因為使用TCP/IP連線,需要建立三次握手
4.2.不一定-h都是tcp,-hlocalhost是socket連線
三、mysql服務構成
1.例項
1.MySQL的後臺程序+執行緒+預分配的記憶體結構。
2.MySQL在啟動的過程中會啟動後臺守護程序,並生成工作執行緒,預分配記憶體結構供MySQL處理資料使用。
1.什麼是例項?
一個程序 + 多個執行緒 + 預分配記憶體空間
2.多例項?
多個程序 + 多個執行緒 + 多個預分配的記憶體空間
2.mysqld伺服器程式構成
mysqld是一個守護程序但是本身不能自主啟動
[root@db04 ~]# /etc/init.d/mysqld start
1)連線層
1.驗證使用者的合法性
2.提供兩種連線方式(TCP/IP socket)
3.建立一個與SQL層互動的執行緒
2)sql層
1.接收連線層傳來的SQL語句
2.驗證語法
3.驗證語義(DML,DDL,DCL,DQL) 檢查你輸入的SQL語句是 select insert update delete... grant
4.解析器:解析你的SQL語句,生成多種執行計劃
5.優化器:接收解析器傳來的多種執行計劃,選擇最優的一種
6.執行器:將優化器選擇出的最優的SQL,執行
6.1 建立一個與儲存引擎層 互動的執行緒
6.2 將執行語句交給儲存引擎層,取資料 接收儲存引擎層,結構化成表的資料結果
7.如果你的前端有快取,寫快取
8.記錄日誌(binlog)
3)儲存引擎層
1.接收到SQL層傳來的SQL語句
2.與磁碟互動,取資料,結構化成表的形式,返回給SQL層
3.建立一個與SQL層互動的執行緒
四、mysql相關命令
1.啟動資料庫
/etc/init.d/mysqld start ------> mysql.server ------> mysqld_safe ------> mysqld
systemctl start mysql ------> mysqld_safe ------> mysqld
mysqld_safe --defaults-file=/etc/my.cnf ------> mysqld_safe ------> mysqld
2.停止資料庫
/etc/init.d/mysqld stop
systemctl stop mysqld
mysqladmin -uroot -p123 shutdown
#不建議使用
kill -9 pid
killall mysqld
pkill mysqld
#出現問題:
1.如果在業務繁忙的情況下,資料庫不會釋放pid和sock檔案
2.號稱可以達到和Oracle一樣的安全性,但是並不能100%達到
3.在業務繁忙的情況下,丟資料(補救措施,高可用)
3、設定密碼
1.mysqladmin -uroot -p123 password '1'
2.update mysql.user set password=password('123') where user='root' and host='localhost';
3.set password=password('1'); 修改當前使用者的密碼
4.grant all on *.* to 'root'@'localhost' identified by '123';
五、mysql連線管理
1、mysql自帶的連線命令 mysql引數
mysql
#常見的特定於客戶機的連線選項:
-u: 指定使用者 mysql -uroot
-p: 指定密碼 mysql -uroot -p567
-h: 指定主機域 mysql -uroot -p567 -h127.0.0.1
-P: 指定埠 mysql -uroot -p567 -h127.0.0.1 -P3307
-S: 指定socket檔案 mysql -uroot -p567 -S /tmp/mysql.sock
-e: 指定SQL語句(庫外執行SQL語句) mysql -uroot -p567 -e "show databases;"
#--protocol: 指定連線方式 mysql --protocol=TCP --protocol=socket
2、第三方的連線工具
1.sqlyog
2.navicat
#注意:資料庫是沒有外網的,想連線可以使用通道
3.heidisql
4.應用程式連線MySQL
#注意:需要載入對應語言程式的API
六、mysql多例項部署
NGINX多例項就是多個配置檔案
mysql多例項:
1.多個數據目錄
2.多個埠
3.多個socket檔案
4.多個日誌檔案
1.建立多個數據目錄
[root@db01 ~]# mkdir /data/{3307,3308,3309} -p
2.準備多個配置檔案
[root@db01 data]# vim /data/3307/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/data/3307/data
port=3307
socket=/data/3307/mysql.sock
log-error=/data/3307/data/mysql.err
log-bin=/data/3307/data/mysql-bin
server_id=7
-------------------------------------------
[root@db01 data]# vim /data/3308/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/data/3308/data
port=3308
socket=/data/3308/mysql.sock
log-error=/data/3308/data/mysql.err
log-bin=/data/3308/data/mysql-bin
server_id=8
--------------------------------------------
[root@db01 data]# vim /data/3309/my.cnf
[mysqld]
basedir=/service/mysql
datadir=/data/3309/data
port=3309
socket=/data/3309/mysql.sock
log-error=/data/3309/data/mysql.err
log-bin=/data/3309/data/mysql-bin
server_id=9
3.初始化多套資料目錄
[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3307/data
[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3308/data
[root@db01 scripts]# ./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/data/3309/data
#使用tree可以檢視
[root@db01 scripts]# tree -L 3 /data
4.授權目錄
[root@db01 scripts]# chown -R mysql.mysql /data
5.啟動資料庫
[root@db01 scripts]# mysqld_safe --defaults-file=/data/3307/my.cnf &
[root@db01 scripts]# mysqld_safe --defaults-file=/data/3308/my.cnf &
[root@db01 scripts]# mysqld_safe --defaults-file=/data/3309/my.cnf &
6.檢查啟動
[root@db01 scripts]# netstat -lntup|grep 330
tcp6 0 0 :::3307 :::* LISTEN 25550/mysqld
tcp6 0 0 :::3308 :::* LISTEN 25722/mysqld
tcp6 0 0 :::3309 :::* LISTEN 25894/mysqld
7.多例項設定密碼
[root@db01 scripts]# mysqladmin -uroot -S /data/3307/mysql.sock password '3307'
[root@db01 scripts]# mysqladmin -uroot -S /data/3308/mysql.sock password '3308'
[root@db01 scripts]# mysqladmin -uroot -S /data/3309/mysql.sock password '3309'
8.多例項驗證
[root@db01 scripts]# mysql -uroot -p3307 -S /data/3307/mysql.sock -e "show variables like 'server_id';"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 7 |
+---------------+-------+
[root@db01 scripts]# mysql -uroot -p3308 -S /data/3308/mysql.sock -e "show variables like 'server_id';"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 8 |
+---------------+-------+
[root@db01 scripts]# mysql -uroot -p3309 -S /data/3309/mysql.sock -e "show variables like 'server_id';"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id | 9 |
+---------------+-------+
9.連線多例項小技巧
[root@db01 scripts]# vim /usr/bin/mysql3309
mysql -uroot -p3309 -S /data/3309/mysql.sock
[root@db01 scripts]# vim /usr/bin/mysql3308
mysql -uroot -p3308 -S /data/3308/mysql.sock
[root@db01 scripts]# vim /usr/bin/mysql3307
mysql -uroot -p3307 -S /data/3307/mysql.sock
[root@db01 scripts]# chmod +x /usr/bin/mysql*