二、MySQL 安装部署
2.1 RPM包安装
2.1.1 yum在线安装
MySQL官方网站
1、下载并安装MySQL官方的 Yum Repository
[root@node1 ~]# wget -c https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
2、添加 MySQL Yum Repository
[root@node1 ~]# yum localinstall mysql80-community-release-el7-5.noarch.rpm -y
3、选择安装发行版
[root@node1 ~]# yum-config-manager --disable mysql80-community #禁用8.0
[root@node1 ~]# yum-config-manager --enable mysql57-community #启用5.7
4、在线安装
[root@node1 ~]# yum install -y mysql-community-server
5、启动数据库
[root@node1 ~]# systemctl enable --now mysqld
6、登陆
[root@node1 ~]# tmp_pwd=`awk '/temporary password/ {print $NF}' /var/log/mysqld.log`
[root@node1 ~]# mysql -uroot -p$tmp_pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.37 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
7、验证
#查看状态
[root@node1 ~]# systemctl status mysqld
#查看端口
[root@node1 ~]# netstat -lnpt | grep 3306
tcp6 0 0 :::3306 :::* LISTEN 1823/mysqld
#查看进程
[root@node1 ~]# ps -ef | grep mysqld
mysql 1823 1 0 22:08 ? 00:00:00 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
root 1856 1393 0 22:10 pts/0 00:00:00 grep --color=auto mysqld
2.1.2 rpm包离线安装
事先从官网下载RPM安装包,上传至服务器:
[root@node2 ~]# ls -l mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar
-rw-r--r-- 1 root root 545894400 Mar 27 22:31 mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar
解压查看:
[root@node2 ~]# tar xf mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar
[root@node2 ~]# ls -l mysql-community-*
-rw-r--r-- 1 7155 31415 26670472 Dec 16 10:01 mysql-community-client-5.7.37-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 318884 Dec 16 10:01 mysql-community-common-5.7.37-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 4122424 Dec 16 10:01 mysql-community-devel-5.7.37-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 47760004 Dec 16 10:02 mysql-community-embedded-5.7.37-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 23316972 Dec 16 10:02 mysql-community-embedded-compat-5.7.37-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 132204460 Dec 16 10:02 mysql-community-embedded-devel-5.7.37-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 2474780 Dec 16 10:02 mysql-community-libs-5.7.37-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 1264836 Dec 16 10:02 mysql-community-libs-compat-5.7.37-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 182274360 Dec 16 10:02 mysql-community-server-5.7.37-1.el7.x86_64.rpm
-rw-r--r-- 1 7155 31415 125477564 Dec 16 10:03 mysql-community-test-5.7.37-1.el7.x86_64.rpm
其中:
mysql-community-client 客户端
mysql-community-devel 开发库
mysql-community-common 服务端和客户端的公共文件
mysql-community-embedded 嵌入式
mysql-community-serve 服务端
mysql-community-test 测试组件
mysql-community-libs 共享库
mysql-community-libs-compat MySQL之前版本的共享兼容库
安装:
首先限制mariadb相关软件包。
[root@node2 ~]# yum remove mariadb-libs -y
# 安装
[root@node2 ~]# rpm -ivh mysql-community-client-5.7.37-1.el7.x86_64.rpm
mysql-community-common-5.7.37-1.el7.x86_64.rpm \
mysql-community-libs-5.7.37-1.el7.x86_64.rpm \
mysql-community-server-5.7.37-1.el7.x86_64.rpm
设计开机自启并启动
[root@node2 ~]# systemctl enable --now mysqld
登陆
[root@node2 ~]# tmp_pwd=`awk '/temporary password/ {print $NF}' /var/log/mysqld.log`
[root@node2 ~]# mysql -uroot -p$tmp_pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.37 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
2.2 通用二进制格式安装
1、下载glibc版本的Mysql
[root@node3 ~]# ll mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
-rw-r--r-- 1 root root 666603757 Mar 29 16:39 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
2、新建用户以安全方式运行进程
[root@node3 ~]# groupadd -r -g 306 mysql
[root@node3 ~]# useradd -r -g 306 -u 306 -s /bin/false mysql
3、解压,创建软连接
[root@node3 ~]# tar xf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
[root@node3 ~]# ln -sv /usr/local/mysql-5.7.37-linux-glibc2.12-x86_64/ /usr/local/mysql
‘/usr/local/mysql’ -> ‘/usr/local/mysql-5.7.37-linux-glibc2.12-x86_64/’
4、修改文件权限,配置环境变量
[root@node3 ~]# chown -R mysql.mysql /usr/local/mysql/ # 修改文件
[root@node3 ~]# echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh
[root@node3 ~]# source /etc/profile.d/mysql.sh
5、初始化
[root@node3 ~]# mysqld --initialize --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
...
2022-03-29T09:07:02.861566Z 1 [Note] A temporary password is generated for root@localhost: GoXgsae%L2,0
[root@node3 ~]# tmp_pwd='GoXgsae%L2,0'
6、为mysql提供主配置文件
[root@node3 ~]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=mysqld.pid
7、为mysql提供sysv服务脚本
[root@node3 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
8、启动mysql
[root@node3 ~]# chkconfig --add mysqld #添加为系统服务
[root@node3 ~]# chkconfig mysqld on #开机自启动
[root@node3 ~]# systemctl start mysqld
9、登陆
[root@node3 ~]# mysql -uroot -p$tmp_pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.37 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
2.3 源码安装
从5.5开始使用cmake编译。
1、安装开发工具和开发包
[root@node4 ~]# yum install make gcc gcc-c++ cmake bison-devel ncurses-devel openssl-devel -y
2、 创建用户和组
[root@node4 ~]# groupadd -r -g 306 mysql
[root@node4 ~]# useradd -r -u 306 -g 306 -s /bin/false mysql
3、编译安装MySQL
1)解压
[root@node4 ~]# tar xf mysql-boost-5.7.37.tar.gz -C /usr/local/src/
2)使用cmake编译MySQL
[root@node4 mysql-5.7.37]# cmake -DWITH_BOOST=/usr/local/src/mysql-5.7.37/boost \
-DWITH_ZLIB=system \
-DSYSCONFDIR=/etc \
-DMYSQL_DATADIR=/usr/local/mysql/data
MySQL :: MySQL 5.7 Reference Manual :: 2.9.7 MySQL Source-Configuration Options
Formats(格式) | Description(描述) |
---|---|
MYSQL_DATADIR | Data directory 数据目录 |
SYSCONFDIR | Option file directory 选项文件目录 |
WITH_BOOST | The location of the Boost library sourcesBoost 库源的位置 |
WITH_ZLIB | Type of zlib support zlib 支持的类型 |
cmake指定编译选项的方式不同于make,其实现方式对比如下:
./configure cmake .
./configure --help cmake . -LH or ccmake .
注意:如果想清理此前的编译所生成的文件重新编译,则需要使用如下两条命令:
[root@node4 mysql-5.7.37]make clean;rm CMakeCache.txt
3)编译安装
[root@node4 mysql-5.7.37]# make && make install
4、配置环境变量
[root@node4 ~]# echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh
[root@node4 ~]# source /etc/profile.d/mysql.sh
5、初始化
[root@node4 ~]# mysqld --initialize --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
...
2022-03-29T12:03:46.314041Z 1 [Note] A temporary password is generated for root@localhost: >RHWf2A#y6u-
[root@node4 ~]# tmp_pwd='>RHWf2A#y6u-'
6、为mysql提供主配置文件
[root@node3 ~]# vim /etc/my.cnf
[mysqld]
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=mysqld.pid
7、为mysql提供sysv服务脚本
[root@node4 ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@node4 ~]# chkconfig --add mysqld
[root@node4 ~]# chkconfig mysqld on
启动MySQL:
[root@node4 ~]# systemctl start mysqld
登陆:
[root@node4 ~]# mysql -uroot -p$tmp_pwd
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.37
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
2.4 MySQL多实例安装
1、创建mysql用户及组
[root@node5 ~]# groupadd -r -g 306 mysql
[root@node5 ~]# useradd -r -g 306 -u 306 -s /bin/false mysql
2、获取软件
[root@node5 ~]# ll mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
-rw-r--r-- 1 root root 666603757 Mar 29 20:21 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
3、解压,创建软连接
[root@node5 ~]# tar xf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local
[root@node5 ~]# ln -sv /usr/local/mysql-5.7.37-linux-glibc2.12-x86_64 /usr/local/mysql
‘/usr/local/mysql’ -> ‘/usr/local/mysql-5.7.37-linux-glibc2.12-x86_64’
4、配置mysql环境变量
[root@node5 ~]# echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh
[root@node5 ~]# source /etc/profile.d/mysql.sh
5、准备数据目录
[root@node5 ~]# mkdir -p /data/330{6..8}/data
[root@node5 ~]# tree /data
/data
├── 3306
│ └── data
├── 3307
│ └── data
└── 3308
└── data
6 directories, 0 files
方法1:每一个MySQL多实例的配置文件
① 配置文件
[root@node5 ~]# vim /data/3306/my.cnf
[client]
port = 3306
socket = /data/3306/mysql.sock
[mysqld]
user = mysql
port = 3306
socket = /data/3306/mysql.sock
basedir = /usr/local/mysql
datadir = /data/3306/data
server-id = 3306
[mysqldump]
quick
max_allowed_packet = 16M
[mysqld_safe]
log-error=/data/3306/mysql_3306.err
pid-file=/data/3306/mysqld.pid
[root@node5 ~]# for i in 330{7,8}; do cp /data/3306/my.cnf /data/$i/my.cnf; sed -i "s/3306/$i/g" /data/$i/my.cnf; done
[root@node5 ~]# touch /data/3306/mysql_3306.err /data/3307/mysql_3307.err /data/3308/mysql_3308.err
②修改MySQL多实例的文件权限
[root@node5 ~]# chown -R mysql.mysql /data/330{6..8}/
③初始化多实例
[root@node5 ~]# mysqld --initialize --datadir=/data/3306/data --basedir=/usr/local/mysql --user=mysql
...
2022-03-29T12:51:20.868470Z 1 [Note] A temporary password is generated for root@localhost: _6qQjp!*ymf_
[root@node5 ~]# mysqld --initialize --datadir=/data/3307/data --basedir=/usr/local/mysql --user=mysql
...
2022-03-29T12:51:50.476617Z 1 [Note] A temporary password is generated for root@localhost: /(v+FhezJ4oj
[root@node5 ~]# mysqld --initialize --datadir=/data/3307/data --basedir=/usr/local/mysql --user=mysql
...
2022-03-29T12:52:21.663797Z 1 [Note] A temporary password is generated for root@localhost: kSTC#H2H(ool
④启动MySQL多实例
[root@node5 ~]# mysqld_safe --defaults-file=/data/3306/my.cnf &
[root@node5 ~]# mysqld_safe --defaults-file=/data/3307/my.cnf &
[root@node5 ~]# mysqld_safe --defaults-file=/data/3308/my.cnf &
[root@node5 ~]# netstat -lnupt | grep 330
tcp6 0 0 :::3306 :::* LISTEN 1901/mysqld
tcp6 0 0 :::3307 :::* LISTEN 2091/mysqld
tcp6 0 0 :::3308 :::* LISTEN 4071/mysqld
⑤登录
[root@node5 ~]# mysql -uroot -p' _6qQjp!*ymf_' -S /data/3306/mysql.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.37
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
⑥修改密码
[root@node5 ~]# mysqladmin -uroot -p'_6qQjp!*ymf_' -S /data/3306/mysql.sock password 'MySQL@123'
⑦关闭
[root@node5 ~]# mysqladmin -uroot -p'MySQL@123' -S /data/3306/mysql.sock shutdown
方法2:使用官方mysqld_multi
MySQL :: MySQL 5.7 Reference Manual :: 4.3.4 mysqld_multi — Manage Multiple MySQL Servers
②如果要加log-error
的配置,需事先创建文件或者在初始化加入log-error
参数
[root@node5 ~]# touch /data/3306/mysql_3306.err /data/3307/mysql_3307.err /data/3308/mysql_3308.err
[root@node5 ~]# vim /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
pass = MySQL@123
#官方password有BUG
[mysqld3306]
socket = /data/3306/mysql.sock
port = 3306
pid-file = /data/3306/mysqld.pid
datadir = /data/3306/data
log-error = /data/3306/mysql_3306.err
[mysqld3307]
socket = /data/3307/mysql.sock
port = 3307
pid-file = /data/3307/mysqld.pid
datadir = /data/3307/data
log-error = /data/3307/mysql_3307.err
[mysqld3308]
socket = /data/3308/mysql.sock
port = 3308
pid-file = /data/3308/mysqld.pid
datadir = /data/3308/data
log-error = /data/3308/mysql_3308.err
!includedir /etc/my.cnf.d
② 修改MySQL多实例的文件权限
[root@node5 ~]# chown -R mysql.mysql /data/330{6..8}/
③ 配置mysql环境变量
[root@node5 ~]# echo 'export PATH=$PATH:/usr/local/mysql/bin' > /etc/profile.d/mysql.sh
[root@node5 ~]# source /etc/profile.d/mysql.sh
④ 初始化多实例
[root@node5 ~]# mysqld --initialize --datadir=/data/3306/data --basedir=/usr/local/mysql --user=mysql
...
2022-03-29T12:51:20.868470Z 1 [Note] A temporary password is generated for root@localhost: T#lhk6Yu5!q%
[root@node5 ~]# mysqld --initialize --datadir=/data/3307/data --basedir=/usr/local/mysql --user=mysql
...
2022-03-29T12:51:50.476617Z 1 [Note] A temporary password is generated for root@localhost: iSKodkuwY2_Q
[root@node5 ~]# mysqld --initialize --datadir=/data/3308/data --basedir=/usr/local/mysql --user=mysql
...
2022-03-29T12:52:21.663797Z 1 [Note] A temporary password is generated for root@localhost: CBdoy_&ol3xs
⑤ 启动多实例
[root@node5 ~]# mysqld_multi start 3306-3308
[root@node5 ~]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is running
MySQL server from group: mysqld3307 is running
MySQL server from group: mysqld3308 is running
⑥ 授权用户
[root@node5 ~]# mysql -uroot -p'MySQL@123' -S /data/3306/mysql.sock -e "GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'MySQL@123'"
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@node5 ~]# mysql -uroot -p'MySQL@123' -S /data/3307/mysql.sock -e "GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'MySQL@123'"
mysql: [Warning] Using a password on the command line interface can be insecure.
[root@node5 ~]# mysql -uroot -p'MySQL@123' -S /data/3308/mysql.sock -e "GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'MySQL@123'"
mysql: [Warning] Using a password on the command line interface can be insecure.
⑦ 登录多实例
[root@node5 ~]# mysql -uroot -p'MySQL@123' -S /data/3306/mysql.sock
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.37 MySQL Community Server (GPL)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
⑧ 停止多实例
[root@node5 ~]# mysqld_multi stop 3306-3308
[root@node5 ~]# mysqld_multi report
Reporting MySQL servers
MySQL server from group: mysqld3306 is not running
MySQL server from group: mysqld3307 is not running
MySQL server from group: mysqld3308 is not running