[toc]

MySQL启动关闭流程

CentOS6

image-20230403152105253

CentOS7

image-20230703201223914

启停命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 启动
## CentOS6、7:
/etc/init.d/mysqld start
service mysqld start

## CentOS7:
systemctl start mysqld
/app/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql

# 停止
## CentOS6、7:
/etc/init.d/mysqld stop
service mysqld stop

## CentOS7:
systemctl stop mysqld
mysqladmin -uroot -p123 shutdown
## 不建议使用
kill -9 PID
killall mysqld
pkill mysqld

可通过如下地址查看,生产高并发环境野蛮粗鲁杀死数据库进程导致故障企业案例:

625某电商网站数据库宕机故障解决实录(上)

625某电商网站数据库宕机故障解决实录(下)

MySQL实例初始化配置

配置文件读取顺序

image-20230403155945537

  • 预编译

  • 配置文件(读取顺序)

    • /etc/my.cnf server_id=1

    • /etc/mysql/my.cnf server_id=2

    • /$BASEDIR/my.cnf server_id=3

      1
      /app/mysql-5.6.50
    • defaults-extra-file=/tmp/my.cnf server_id=5

    • ~/.my.cnf server_id=4

      1
      mysql -uroot -p123 -e 'show variables like "server_id"'
    • 命令行

注意:当MySQL启动时指定了该参数 --defaults-file=/etc/my.cnf
MySQL配置文件,当出现相同配置时,最后读取的则覆盖,不同配置则叠加

判断那个配置文件生效

1
2
3
4
5
6
7
8
9
10
11
12
# cmake:
socket=/application/mysql/tmp/mysql.sock
# 命令行:
--socket=/tmp/mysql.sock
# 配置文件:
/etc/my.cnf中[mysqld]标签下:socket=/opt/mysql.sock
# default参数:
--defaults-file=/tmp/a.txt配置文件中[mysqld]标签下:socket=/tmp/test.sock

# 最终执行命令
mysqld --defaults-file=/tmp/a.txt --socket=/tmp/mysql.sock --user=mysql
## 执行--socket=/tmp/mysql.sock (命令行优先级最高)

mysql配置文件

MySQL配置文件的作用:

  • 影响服务端的启动
  • 影响客户端的连接
1
2
3
4
5
6
7
[mysqld || server] 		// 影响服务端的启动
socket=/tmp/mysql.sock

[mysql || client] // 影响客户端的连接
socket=/tmp/mysql.sock
user=root
password=789

MySQL多实例

先决条件:

  • 单实例:
    • 个进程 + 多个线程 + 单个预分配的内存空间
  • 多实例:
    • 多个进程 + 多个线程 + 多个预分配的内存空间
  • MySQL多实例:
    • 多个数据目录
    • 多个配置文件
      • 多个端口
      • 多个socket文件
      • 多个PID文件
      • 多个日志文件

多实例部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# 创建多实例存放目录
mkdir -p /data/330{7..9}

# 配置多个配置文件
## 3307配置文件
vim /data/3307/my.cnf
[mysqld]
port=3307
basedir=/app/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
pid_file=/data/3307/mysql.pid
log-error=/data/3307/mysql.err
## 3308配置文件
vim /data/3308/my.cnf
[mysqld]
port=3308
basedir=/app/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
pid_file=/data/3308/mysql.pid
log-error=/data/3308/mysql.err
## 3309配置文件
vim /data/3309/my.cnf
[mysqld]
port=3309
basedir=/app/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
pid_file=/data/3309/mysql.pid
log-error=/data/3309/mysql.err

# 初始化
cd /app/mysql/scripts/
## 3307初始化
./mysql_install_db --defaults-file=/data/3307/my.cnf --user=mysql --basedir=/app/mysql --datadir=/data/3307/data
## 3308初始化
./mysql_install_db --defaults-file=/data/3308/my.cnf --user=mysql --basedir=/app/mysql --datadir=/data/3308/data
## 3309初始化
./mysql_install_db --defaults-file=/data/3309/my.cnf --user=mysql --basedir=/app/mysql --datadir=/data/3309/data

# 查看部署文件的层级目录
tree -L 3 /data/
/data/
├── 3306
├── 3307
│   ├── data
│   │   ├── ibdata1
│   │   ├── ib_logfile0
│   │   ├── ib_logfile1
│   │   ├── mysql
│   │   ├── performance_schema
│   │   └── test
│   └── my.cnf
├── 3308
│   ├── data
│   │   ├── ibdata1
│   │   ├── ib_logfile0
│   │   ├── ib_logfile1
│   │   ├── mysql
│   │   ├── performance_schema
│   │   └── test
│   └── my.cnf
└── 3309
├── data
│   ├── ibdata1
│   ├── ib_logfile0
│   ├── ib_logfile1
│   ├── mysql
│   ├── performance_schema
│   └── test
└── my.cnf

# 授权
chown -R mysql.mysql /data/

# 启动多实例
## 方案一:使用mysqld管理进程
### 3307启动命令
/app/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --user=mysql &
### 3308启动命令
/app/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf --user=mysql &
### 3309启动命令
/app/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf --user=mysql &

## 方案二:使用mysqld_safe管理进程
### 3307启动命令
mysqld_safe --defaults-file=/data/3307/my.cnf &
### 3308启动命令
mysqld_safe --defaults-file=/data/3308/my.cnf &
### 3309启动命令
mysqld_safe --defaults-file=/data/3309/my.cnf &

## 方案三:使用systemd管理进程
### 3307配置
vim /usr/lib/systemd/system/mysql3307.service
[Unit]
Description=MySQL Server
After=network.target,syslog.target

[Service]
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --user=mysql

[Install]
WantedBy=multi-user.target

### 3308配置
vim /usr/lib/systemd/system/mysql3308.service
[Unit]
Description=MySQL Server
After=network.target,syslog.target

[Service]
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf --user=mysql

[Install]
WantedBy=multi-user.target

### 3309配置
vim /usr/lib/systemd/system/mysql3309.service
[Unit]
Description=MySQL Server
After=network.target,syslog.target

[Service]
ExecStart=/app/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf --user=mysql

[Install]
WantedBy=multi-user.target

# 验证启动
netstat -lntp | grep 330

# 多实例设置密码
## 3307设置密码
mysqladmin -uroot -p -S /data/3307/mysql.sock password '123'
## 3308设置密码
mysqladmin -uroot -p -S /data/3308/mysql.sock password '123'
## 3309设置密码
mysqladmin -uroot -p -S /data/3309/mysql.sock password '123'

# 连接多实例
## 连接3307
mysql -uroot -p123 -S /data/3307/mysql.sock
## 连接3308
mysql -uroot -p123 -S /data/3308/mysql.sock
## 连接3309
mysql -uroot -p123 -S /data/3309/mysql.sock

# 连接数据库多实例小技巧
vim /usr/local/bin/mysql3307
mysql -uroot -p123 -S /data/3307/mysql.sock
vim /usr/local/bin/mysql3308
mysql -uroot -p123 -S /data/3308/mysql.sock
vim /usr/local/bin/mysql3309
mysql -uroot -p123 -S /data/3309/mysql.sock