MySQL的启动和关闭

日常启停 需要依赖于/etc/my.cnf,启动时会读取配置文件的信息

  • mysql.server start -> mysqld_safe -> mysqld
  • mysql.service -> mysqld

维护启停

  • mysqld_safe --skip-grant-tables --skip-networking & (我们一般会将我们需要的参数临时加到命令行.也会读取/etc/my.cnf的内容,但是如果冲突,命令行优先级最高)

直接启动和直接关闭

  • mysqld_safe &
  • mysqladmin -uroot -p123456 shutdown

初始化配置

初始化配置的作用

  1. 影响数据库的启动
  2. 影响到客户端的功能

初始化配置的方法

  • 初始化配置文件/etc/my.cnf
  • 启动命令行上进行设置mysqld_safe,mysqld
  • 预编译时设置(仅限于编译安装时设置)

初始化配置文件的书写格式

[标签]
参数=值
[标签]
xxx=xxx

#配置文件标签的归类
#服务器端
[mysqld]
[mysqld_safe]
[server]

#客户端
[mysql]
[mysqladmin]
[mysqldump]
[client]

配置文件设置样板(5.7)

[mysqld]
#用户
user=mysql   
#软件安装目录                
basedir=/application/mysql  
#数据路径
datadir=/data/mysql/data 
#socket文件位置
socket=/tmp/mysql.sock
#服务器id号
server_id=6
#端口号
port=3306
#客户端配置
[mysql]
#socket文件位置
socket=/tmp/mysql.sock

配置文件读取顺序

可以通过mysqld --help --verbose |grep my.cnf命令查找有关配置文件的信息,越靠后优先级越高,参数冲突以靠后的为准

  • 1最高,4最低
  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/mysql/etc/my.cnf
  4. ~/.my.cnf

还可以用参数来指定配置文件

#指定默认配置文件
#--defaults-file 
#指定/tmp/aa.txt为配置文件
mysqld_safe --defaults-file=/tmp/aa.txt &

MySQL的连接管理

默认情况下,是不能远程连接的,需要在数据库添加权限

#添加root账户密码为123456,10.0.0.0/24白名单
grant all on *.* to root@'10.0.0.%' identified by '123456';

配置完成后可以使用远程的地址登录,也可以使用数据库工具

#使用其他地址登录数据库
mysql -uroot -p -h 10.0.0.51 -P3306

多实例管理

在一台主机上,运行多个MySQL实例,端口号不同

准备多个目录

mkdir -p /data/330{7,8,9}/data

准备配置文件

cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/application/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=/application/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=/application/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

初始化三套数据,备份端口为3306的配置文件

初始化参数中,是设置不设密码,可以直接登录

mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/application/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/application/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/application/mysql

systemd管理多实例

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

授权并启动

chown -R mysql.mysql /data/*
systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service

查看是否启动成功

[root@db01 system]# netstat -lutnp |grep mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      4622/mysqld         
tcp6       0      0 :::3307                 :::*                    LISTEN      4839/mysqld         
tcp6       0      0 :::3308                 :::*                    LISTEN      4846/mysqld         
tcp6       0      0 :::3309                 :::*                    LISTEN      4853/mysqld   

验证多实例

mysql -S /data/3307/mysql.sock -e "select @@server_id"
mysql -S /data/3308/mysql.sock -e "select @@server_id"
mysql -S /data/3309/mysql.sock -e "select @@server_id"