一、初始化文件
1.作用
影响到数据库的启动、日常工作。影响到客户端连接(本地服务器上发起的)。
2.文件格式
[root@db01 ~]
[mysqld]
user=mysql
basedir=
/data/app
/mysql
datadir=
/data/3306
/data
socket=
/tmp
/mysql
.sock
[mysql]
socket=
/tmp
/mysql
.sock
[标签项] : 用来表示不同的程序
服务端: [mysqld] [mysqld_safe] [server]
客户端: [mysql] [mysqldump] [client]
配置=xxx : 设置的参数键值对
user=mysql # 数据库管理用户
basedir=/data/app/mysql # 程序路径
datadir=/data/3306/data # 数据路径
socket=/tmp/mysql.sock # socket文件位置
3.配置文件读取顺序
[root@db01 ~]
/etc
/my
.cnf
---》
/etc
/mysql
/my
.cnf
---》
/usr
/local
/mysql
/etc
/my
.cnf
---
-》 ~
/.my
.cnf
建议: 每个数据库保留一个配置文件。
彩蛋:
如果有多个配置文件,例如
/etc
/my
.cnf
---> port=3306
~
/.my
.cnf
---> port=3308
数据库启动时,port是多少?
mysqld
--defaults
-file=
/opt
/my1
.cnf &
mysqld_safe
--defaults
-file=
/opt
/my2
.cnf &
4.root本地管理员的密码忘记
[root@db01 tmp]
Shutting down MySQL
.. SUCCESS
!
[root@db01 tmp]
mysqld_safe
--skip
-grant
-tables
--skip
-networking &
参数作用:
--skip
-grant
-tables : 跳过授权表,不开启验证功能。
--skip
-networking : 阻止所有TCP
/IP网络连接。
mysql> flush privileges
;
mysql> alter user root@
'localhost' identified by
'123456';
[root@db01 tmp]
5.MySQL的启动关闭
6.多实例应用
创建相关目录
[root@db01 ~]
准备配置文件
cat >
/data/3307
/my
.cnf <<EOF
[mysqld]
user=mysql
basedir=
/data/app
/mysql
datadir=
/data/3307
/data
server_id=7
port=3307
log_bin=
/data/3307
/logs
/mysql
-bin
socket=
/tmp
/mysql3307
.sock
EOF
cat >
/data/3308
/my
.cnf <<EOF
[mysqld]
user=mysql
basedir=
/data/app
/mysql
datadir=
/data/3308
/data
server_id=8
port=3308
log_bin=
/data/3308
/logs
/mysql
-bin
socket=
/tmp
/mysql3308
.sock
EOF
cat >
/data/3309
/my
.cnf <<EOF
[mysqld]
user=mysql
basedir=
/data/app
/mysql
datadir=
/data/3309
/data
server_id=9
port=3309
log_bin=
/data/3309
/logs
/mysql
-bin
socket=
/tmp
/mysql3309
.sock
EOF
授权
[root@db01 ~]
初始化数据
mv /etc
/my
.cnf
/etc
/my
.cnf
.bak
mysqld
--initialize
-insecure
--user=mysql
--basedir=
/data/app
/mysql
--datadir=
/data/3307
/data
mysqld
--initialize
-insecure
--user=mysql
--basedir=
/data/app
/mysql
--datadir=
/data/3308
/data
mysqld
--initialize
-insecure
--user=mysql
--basedir=
/data/app
/mysql
--datadir=
/data/3309
/data
mv /etc
/my
.cnf
.bak
/etc
/my
.cnf
启动多实例
普通启动
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
配置多实例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=
/data/app
/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=
/data/app
/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=
/data/app
/mysql
/bin
/mysqld
--defaults
-file=
/data/3309
/my
.cnf
LimitNOFILE = 5000
EOF
[root@db01 ~]
[root@db01 ~]
[root@db01 ~]
使用navicat连接多实例
mysql
-S
/tmp
/mysql3307
.sock
grant all on
*.* to root@
'10.0.0.%' identified by
'123';
mysql
-S
/tmp
/mysql3308
.sock
-e
"grant all on *.* to root@'10.0.0.%' identified by '123';"
mysql
-S
/tmp
/mysql3309
.sock
-e
"grant all on *.* to root@'10.0.0.%' identified by '123';"
7. 多版本多实例应用
上传软件、解压、软连接
tar xf mysql
-5
.6
.46
-linux
-glibc2
.12
-x86_64
.tar
.gz
tar xf mysql
-8
.0
.18
-linux
-glibc2
.12
-x86_64
.tar
.xz
ln
-s mysql
-8
.0
.18
-linux
-glibc2
.12
-x86_64 mysql80
ln
-s mysql
-5
.6
.46
-linux
-glibc2
.12
-x86_64 mysql56
创建相关目录
mkdir
-p
/data/331
{7
..8
}/data /data/331
{7
..8
}/logs
准备配置文件
cat >
/data/3317
/my
.cnf <<EOF
[mysqld]
user=mysql
basedir=
/data/app
/mysql56
datadir=
/data/3317
/data
server_id=17
port=3317
log_bin=
/data/3317
/logs
/mysql
-bin
socket=
/tmp
/mysql3317
.sock
EOF
cat >
/data/3318
/my
.cnf <<EOF
[mysqld]
user=mysql
basedir=
/data/app
/mysql80
datadir=
/data/3318
/data
server_id=18
port=3318
log_bin=
/data/3318
/logs
/mysql
-bin
socket=
/tmp
/mysql3318
.sock
EOF
授权
[root@db01 ~]
初始化数据
mv /etc
/my
.cnf
/etc
/my
.cnf
.bak
vim
/etc
/profile
[root@db01 ~]
-bash: mysql: command not found
[root@db01 ~]
/data/app
/mysql56
/scripts
/mysql_install_db
--user=mysql
--basedir=
/data/app
/mysql56
--datadir=
/data/3317
/data
/data/app
/mysql80
/bin
/mysqld
--initialize
-insecure
--user=mysql
--basedir=
/data/app
/mysql80
--datadir=
/data/3318
/data
配置systemd管理
cat >
/etc
/systemd
/system
/mysqld3317
.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=
/data/app
/mysql56
/bin
/mysqld
--defaults
-file=
/data/3317
/my
.cnf
LimitNOFILE = 5000
EOF
cat >
/etc
/systemd
/system
/mysqld3318
.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=
/data/app
/mysql80
/bin
/mysqld
--defaults
-file=
/data/3318
/my
.cnf
LimitNOFILE = 5000
EOF
链接测试
[root@db01 app]
[root@db01 app]
二、MySQL的升级、降级
1.生产思路
备份原数据库数据安装新版本软件关闭原数据库业务(挂维护页)使用新版本软件 “挂” 旧版本数据启动(–skip-grant-tables ,–skip-networking)升级 : 只是升级系统表。升级时间和数据量无关的。正常重启数据库。验证各项功能是否正常。业务恢复。
2. 5.6.46 ----> 5.7.28 Inplace 升级演练
a
. 安装 新版本软件
略。
b
. 停原库 (5
.6
.46)
vim
/data/3317
/my
.cnf
innodb_fast_shutdown=0
[root@db01 data]
c
. 使用高版本软件挂低版本数据启动
[root@db01 data]
[mysqld]
user=mysql
basedir=
/data/app
/mysql
datadir=
/data/3317
/data
socket=
/tmp
/mysql3317
.sock
port=3317
server_id=17
innodb_fast_shutdown=0
[root@db01 data]
d
. 升级 (升级到8
.0可以省略)
[root@db01 data]
e
. 重启数据库到正常状态
[root@db01 data]
[root@db01 data]
ExecStart=
/data/app
/mysql
/bin
/mysqld
--defaults
-file=
/data/3317
/my
.cnf
[root@db01 data]
[root@db01 data]
3. 将5.7 升级至 8.0
mysql-shell工具,8.0以后,可以调用这个命令,升级之前的预检查。 例子: [root@db01 ~]# mysqlsh root:123@10.0.0.51:3306 -e “util.checkForServerUpgrade()”升级时不再需要手工 mysql_upgrade限制:升级前必须要备份。否则无法回退。
a
. 下载 8
.0
.18 版本的 mysql
-shell,并安装 。
https:
//downloads
.mysql
.com
/archives
/
[root@db01 app]
b
. 创建连接用户
[root@db01 data]
mysql> grant all on
*.* to root@
'10.0.0.%' identified by
'123';
mysql> drop user root@
'127.0.0.1';
mysql> drop user root@
'db01';
mysql> drop user
''@
'db01';
mysql> drop user
''@
'localhost';
mysql> drop user root@
'::1';
mysql>
select user
,host
from mysql
.user
;
+-
---
---
---
---
--+
---
---
---
--+
| user
| host
|
+-
---
---
---
---
--+
---
---
---
--+
| root
| 10
.0
.0
.% |
| mysql
.session
| localhost
|
| mysql
.sys
| localhost
|
| root
| localhost
|
+-
---
---
---
---
--+
---
---
---
--+
c
. 预 检查
[root@db01 data]
d
. 停原库(5
.7
.28)
vim
/data/3317
/my
.cnf
innodb_fast_shutdown=0
[root@db01 data]
e
. 使用高版本软件挂低版本数据启动
[root@db01 data]
[mysqld]
user=mysql
basedir=
/data/app
/mysql80
datadir=
/data/3317
/data
socket=
/tmp
/mysql3317
.sock
port=3317
server_id=17
innodb_fast_shutdown=0
[root@db01 data]
f
. 重启数据库到正常状态
[root@db01 data]
[root@db01 data]
ExecStart=
/data/app
/mysql80
/bin
/mysqld
--defaults
-file=
/data/3317
/my
.cnf
[root@db01 data]
[root@db01 data]
4.降级
5.7.28 —》 5.7.10 inplace downgrade演练 原版本: 软件: 5.7.28 /data/app/mysql + 数据:/data/3306/data 目标版本: 5.7.10 /data/app/mysql5710
[root@db01 app]
https:
//dev
.mysql
.com
/doc
/refman
/5
.7
/en
/downgrading
-to
-previous
-series
.html
[root@db01 app]
[root@db01 app]
[root@db01 app]
set sql_mode=
'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
set global sql_mode=
'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' ;
select @@sql_mode
;
ALTER TABLE mysql
.proc MODIFY definer char
(77
) CHARACTER
SET utf8 COLLATE utf8_bin NOT NULL DEFAULT
'';
ALTER TABLE mysql
.event MODIFY definer char
(77
) CHARACTER
SET utf8 COLLATE utf8_bin NOT NULL DEFAULT
'';
ALTER TABLE mysql
.tables_priv MODIFY Grantor char
(77
) COLLATE utf8_bin NOT NULL DEFAULT
'';
ALTER TABLE mysql
.procs_priv MODIFY Grantor char
(77
) COLLATE utf8_bin NOT NULL DEFAULT
'';
[root@db01 app]
set global innodb_fast_shutdown=0
;
[root@db01 app]
[root@db01 mysql5710]
[root@db01 mysql5710]
[mysqld]
user=mysql
basedir=
/data/app
/mysql5710
datadir=
/data/3306
/data
socket=
/tmp
/mysql
.sock
[mysql]
socket=
/tmp
/mysql
.sock
/data/app
/mysql5710
/bin
/mysqld
--skip
-grant
-tables
--skip
-networking &
[root@db01 ~]
[root@db01 ~]
Shutting down MySQL
.. SUCCESS
!
Starting MySQL
. SUCCESS
!
/data/app
/mysql5710
/bin
/mysql
-uroot
-p123456
-S
/tmp
/mysql
.sock