1. 程式人生 > 其它 >03--mysql軟體基本管理 ;mysql建立多例項

03--mysql軟體基本管理 ;mysql建立多例項

目錄

一、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*