MySQL 學習(3)—— MySQL 基礎管理 | 8月更文挑戰

這是我參與8月更文挑戰的第3天,活動詳情查看:8月更文挑戰mysql

一、 MySQL 的啓動與關閉

1. 平常啓動sql

# /home/service/mysql/support-files/mysql.server start
Starting MySQL SUCCESS!
複製代碼

2. 維護性任務啓動shell

# mysqld_safe --skip-grant-tables --skip-networking &
[1] 12150
[root@VM-0-3-centos ~]# 2021-01-20T04:01:24.495644Z mysqld_safe Logging to '/data/mysql/data/VM-0-3-centos.err'.
2021-01-20T04:01:24.533210Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/data
複製代碼

這種狀況下,咱們通常會將咱們須要的參數臨時加到命令行中,同時咱們也會讀取 /etc/my.cnf 下面的內容,若是內容衝突,優先命令行上的參數。數據庫

退出命令以下:vim

# mysqladmin -uroot shutdown
複製代碼

3. 直接使用 mysqld_safe 登陸centos

登陸
# mysqld_safe &
退出
# mysqladmin -uroot shutdown
2021-01-20T04:08:32.753363Z mysqld_safe mysqld from pid file /data/mysql/data/VM-0-3-centos.pid ended
[1]+  完成                  mysqld_safe
複製代碼

二、 初始化配置

2.1 做用

  1. 影響數據庫的啓動bash

  2. 影響客戶端的功能,如登陸服務器

2.2 初始化配置方法

  1. 初始化配置文件(例如:/etc/my.cnf)markdown

  2. 啓動命令行中進行設置(例如:mysqld_safe)session

  3. 預編譯時設置(僅限編譯安裝時設置)

2.3 初始化配置的書寫格式

[標籤]
xxx=xxx
[標籤]
xxx=xxx
複製代碼

2.4 配置文件標籤的歸類

服務端:

[mysqld]
[mysqld_safe]
[server]
複製代碼

客戶端:

[mysql]
[mysqladmin]
[mysqldump]
[client]
複製代碼

2.5 配置文件設置樣板 5.7

# 服務器端配置
[mysqld]
# 用戶
user=mysql
# 軟件安裝目錄
basedir=/home/service/mysql
# 數據路徑
datadir=/data/mysql/data
# socket 文件位置
socket=/tmp/mysql.sock
# 服務器 ID(1-65535)
server_id=6
# 端口號
port=3306
複製代碼
# 客戶端配置
[mysql]
# socket 文件位置
socket=/tmp/mysql.sock
複製代碼

2.6 配置文件讀取順序

# mysqld --help --verbose | grep my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
複製代碼

MySQL 會依次讀取這些文件,所以後面的文件會覆蓋前面的文件,可是咱們不建議這麼作!!!

2.7 強制使用自定義配置文件

--defaults-file
複製代碼
# service mysqld stop
# mysqld_safe --defaults-file=/tmp/aa.cnf &
# mysql
複製代碼

3 MySQL 的鏈接管理

3.1 mysql 命令

TCP/IP 方式

mysql -u用戶名 -p密碼 -h IP -P端口號
複製代碼

注意:使用 TCP/IP 登陸首先要看一下該用戶能不能登陸。

咱們登錄一下試試:

# mysql -uwys -p -h 172.21.0.3 -P3306
Enter password:
ERROR 1045 (28000): Access denied for user 'wys'@'172.21.0.3' (using password: NO)
複製代碼

咱們再使用 root 用戶登陸一下,查看一下當前用戶。

mysql> select user,host from mysql.user;
+---------------+------------+
| user          | host       |
+---------------+------------+
| user1         | 10.0.0.%   |
| user4         | 10.0.0.*   |
| mysql.session | localhost  |
| mysql.sys     | localhost  |
| root          | localhost  |
| user2         | localhost  |
+---------------+------------+
6 rows in set (0.00 sec)
複製代碼

發現沒有用戶 wys,咱們建立一下用戶,再給該用戶受權。

mysql> create user wys@'172.21.0.3';
Query OK, 0 rows affected (0.00 sec)

mysql> grant all on *.* to wys@'172.21.0.3' with grant option;
Query OK, 0 rows affected (0.00 sec)
複製代碼

再次使用該用戶進行登陸,發現登陸成功。

# mysql -uwys -p -h 172.21.0.3 -P3306
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
......
複製代碼

注意:若是咱們寫了 -P,前面必定要有 -h-h 不能夠省略,可是 -P 能夠省略,由於默認是 3306。

若是咱們寫成 mysql -uwys -p -P3306,mysql 就會以本地 socket 方式鏈接。

本地 socket 方式

mysql -u用戶名 -p密碼 -S socket 路徑
複製代碼

遠程登陸和本地登陸區別

遠程登陸

# mysql -uwys -p -h 172.21.0.3 -P3306
複製代碼
mysql> show processlist;
+----+------+------------------+------+---------+------+----------+------------------+
| Id | User | Host             | db   | Command | Time | State    | Info             |
+----+------+------------------+------+---------+------+----------+------------------+
|  8 | wys  | 172.21.0.3:54724 | NULL | Query   |    0 | starting | show processlist |
+----+------+------------------+------+---------+------+----------+------------------+
1 row in set (0.00 sec)
複製代碼

本地登陸

# mysql
複製代碼
mysql> show processlist;
+----+------+------------------+------+---------+------+----------+------------------+
| Id | User | Host             | db   | Command | Time | State    | Info             |
+----+------+------------------+------+---------+------+----------+------------------+
|  8 | wys  | 172.21.0.3:54724 | NULL | Sleep   |  154 |          | NULL             |
|  9 | root | localhost        | NULL | Query   |    0 | starting | show processlist |
+----+------+------------------+------+---------+------+----------+------------------+
2 rows in set (0.00 sec)
複製代碼

能夠看到兩個 Host 是不同的,本地登陸 的 Host 是 localhost遠程登陸 的 Host 是 IP:鏈接線程

當咱們輸入以下命令,這個登陸是遠程登陸仍是本地登陸呢?

# mysql -uwys -S /tmp/mysql.sock -h 172.21.0.3 -P3306
複製代碼

咱們再來執行一下 show processlist 命令。

mysql> show processlist;
+----+------+------------------+------+---------+------+----------+------------------+
| Id | User | Host             | db   | Command | Time | State    | Info             |
+----+------+------------------+------+---------+------+----------+------------------+
|  8 | wys  | 172.21.0.3:54724 | NULL | Sleep   | 1839 |          | NULL             |
|  9 | root | localhost        | NULL | Sleep   | 1685 |          | NULL             |
| 14 | wys  | 172.21.0.3:56436 | NULL | Query   |    0 | starting | show processlist |
+----+------+------------------+------+---------+------+----------+------------------+
3 rows in set (0.00 sec)
複製代碼

能夠看出是遠程登錄的。

結論:當同時出現遠程登陸和本地登陸,優先遠程登陸。

3.2 客戶端工具

  • sqlyog
  • navicat

4 多實例管理

4.1 準備多個目錄

# mkdir -p /data/330{7,8,9}/data
# cd /data/
# ll
總用量 16
drwxr-xr-x 3 root root 4096 1月  20 19:52 3307
drwxr-xr-x 3 root root 4096 1月  20 19:52 3308
drwxr-xr-x 3 root root 4096 1月  20 19:52 3309
drwxr-xr-x 3 root root 4096 1月  13 22:19 mysql
複製代碼

4.2 準備配置文件

cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/home/service/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/mysql-bin
EOF
複製代碼
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/home/service/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/mysql-bin
EOF
複製代碼
cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/home/service/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/mysql-bin
EOF
複製代碼

4.3 初始化三套數據

# mysqld --initialize-insecure --user=mysql --datadir=/data/3307/data --basedir=/home/service/mysql
# mysqld --initialize-insecure --user=mysql --datadir=/data/3308/data --basedir=/home/service/mysql
# mysqld --initialize-insecure --user=mysql --datadir=/data/3309/data --basedir=/home/service/mysql
複製代碼

4.4 systemd 管理多實例

# cd /etc/systemd/system/
# cp mysqld.service mysqld3307.service
# cp mysqld.service mysqld3308.service
# cp mysqld.service mysqld3309.service
複製代碼

修改配置文件:

# vim mysqld3307.service
修改成:
ExecStart=/home/service/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
 # vim mysqld3308.service
修改成:
ExecStart=/home/service/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
 # vim mysqld3309.service
修改成:
ExecStart=/home/service/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
複製代碼

4.5 受權

# chown -R mysql.mysql /data/*
複製代碼

4.6 啓動

# systemctl start mysqld3307.service
# systemctl start mysqld3308.service
# systemctl start mysqld3309.service
# ps -ef | grep mysql
mysql    10736     1  2 11:07 ?        00:00:00 /home/service/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
mysql    10774     1  3 11:07 ?        00:00:00 /home/service/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
mysql    10820     1  5 11:07 ?        00:00:00 /home/service/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
root     10859 28919  0 11:07 pts/0    00:00:00 grep --color=auto mysql
複製代碼

4.7 鏈接

# mysql -S /data/3307/mysql.sock
# mysql -S /data/3308/mysql.sock
# mysql -S /data/3309/mysql.sock
複製代碼
相關文章
相關標籤/搜索