MySQL 安装部署 & 项目实践
# 解压并且安装
#先查找并卸载已经存在的软件包
rpm -qa mysql mysql-server mariadb mariadb-server
rpm -e 包名
xz -d mysql-8.0.21-linux-glibc2.12-x86_64.tar.xz
tar -xvf mysql-8.0.21-linux-glibc2.12-x86_64.tar -C /app/service
mv /app/service/mysql-8.0.21-linux-glibc2.12-x86_64 /app/service/mysql
mkdir -pv /app/logs/mysql && mkdir -pv /app/conf/mysql
1
2
3
4
5
6
7
2
3
4
5
6
7
# 修改配置文件
vi /app/conf/mysql/my.cnf
[mysqld]
user = app
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
basedir = /app/service/mysql
datadir = /app/data/mysql
port = 3306
socket = /tmp/mysql.sock
#设置 utf8mb4 编码
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
skip-character-set-client-handshake
#修改加密方式
default_authentication_plugin = mysql_native_password
#不区分大小写
lower_case_table_names = 1
#跳过 DNS 反查询
skip-name-resolve
#允许最大连接数
max_connections = 2048
open_files_limit = 65535
max-connect-errors = 100000
#错误日志
log-error = /app/logs/mysql/mysql-error.log
#慢查询
slow_query_log = 1
long_query_time = 10
#min_examined_row_limit = 1000
slow_query_log_file = /app/logs/mysql/mysql_slow_query.log
[mysql]
default-character-set = utf8mb4
socket = /tmp/mysql.sock
[client]
default-character-set = utf8mb4
socket = /tmp/mysql.sock
[mysqldump]
socket = /tmp/mysql.sock
[mysqladmin]
socket = /tmp/mysql.sock
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
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
输入以下命令初始化数据库服务
/app/service/mysql/bin/mysqld --defaults-file=/app/conf/mysql/my.cnf --initialize --user=app --basedir=/app/service/mysql --datadir=/app/data/mysql
#初始化后从日志中查询初始化密码,记录下来方便后续使用或者修改密码
grep 'temporary password' /app/logs/mysql/mysql-error.log
1
2
3
2
3
# 服务相关命令
使用以下命令添加环境变量:
echo "export MYSQL_HOME=/app/service/mysql" >> ~/bashrc
echo "export PATH=\$PATH:\$MYSQL_HOME/bin" >> ~/bashrc
#加载环境变量,使其生效
source ~/bashrc
1
2
3
4
2
3
4
或者创建软连接
#添加相关命令的软连接(root 权限运行)
ln -s /app/service/mysql/bin/mysql* /usr/bin/
1
2
2
使用自带的启动脚本
#拷贝命令(root 权限运行)
cp /app/service/mysql/support-files/mysql.server /app/service/mysql_service
#编辑脚本(root 权限运行)
vi /app/service/mysql_service
basedir=/app/service/mysql
datadir=/app/data/mysql
conf=/app/service/mysql/my.cnf
#启动数据库
/app/service/mysql_service start
#重启数据库
/app/service/mysql_service restart
#停止数据库
/app/service/mysql_service stop
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
其他命令
#本地登录
mysql -uroot -p'fjphty:BI96t'
#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'kGXSu4fjF' PASSWORD EXPIRE NEVER;
1
2
3
4
2
3
4
# 集群部署相关
设置之前关闭所有数据库
# 环形主从
A、B、C三个节点分别按上述步骤部署好数据库,配置好时间同步;然后两两设置主从,如:A<B、B<C、C<A,主从设置步骤:
- 主从服务器节点设置不同的 server-id
- 启用二进制日志和 relaylog
- 主节点创建一个拥有复制权限的用户账号
- 查询主节点 binlog 信息
- 设置从节点同步主节点
修改数据库配置文件,[mysqld] 下添加如下内容(选中部分可以使用 IP 地址最后字段作区分)
#可以使用地址最后作为 id
serverid server-id = 175
#开启 MySQ 二进制日志系统
log-bin = /app/logs/mysql/175-master-bin
#要同步的库,用逗号分隔
replicate-do-db = wb,wb_gateway,wb_etl
#从其他节点同步的操作不会记录日志,如果要做主库需要开启这个选项
log-slave-updates
#要同步的表,用逗号分隔,% 表示所有
replicate-wild-do-table = wb.%,wb_gateway.%,wb_etl.%
#忽略的库,每个库一行
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
slave-skip-errors = 1032,1062,1053,1146,2003
#relay log
max_relay_log_size = 0
relay_log = /app/logs/mysql/175-relay-bin
relay_log_purge = 1
relay_log_recovery = 1
sync_relay_log = 0
sync_relay_log_info = 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
service mysql srart
mysql -uroot -p''
show master status;
1
2
3
2
3
然后每个节点都创建同步账号
mysql -A -uroot -pkGXSu4fjF -e "CREATE USER 'rep'@'%' IDENTIFIED BY 'WB45678';GRANT REPLICATION SLAVE ON *.* TO 'rep'@'%';flush privileges;"
mysql -A -urep -pWB45678 -e "select 'ok';"
1
2
2
然后采用逆序启动,C-B-A,即先设置 B<C 主从,启动C节点的 MySQL,执行以下命令,查看主库信息:
mysql -uroot -pkGXSu4fjF
show master status;
1
2
2
再启动B节点的 MySQL,执行以下命令,指定主库信息并完成 **B<C **主从
mysql -uroot -pkGXSu4fjF
#指定主库信息
CHANGE MASTER TO
MASTER_HOST='节点 C 的 ip 地址',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='WB45678',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=2855257;
#开始同步
start slave;
#查看 slave 进程状态,Slave_IO_Running、Slave_SQL_Running 两个参数 Yes 表示状态正常,注意等待主库复制的延迟秒数变为 0 Seconds_Behind_Master: 0
show slave status \G
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
同步完成以后,建立 A<B 主从,先在B节点执行如下命令,查看主库信息:
mysql -uroot -pkGXSu4fjF
show master status;
1
2
2
再启动A节点的 MySQL,执行以下命令,指定主库信息并完成 A<B 主从
mysql -uroot -pkGXSu4fjF
#指定主库信息
CHANGE MASTER TO
MASTER_HOST='节点 B 的 ip 地址',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='WB45678',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=2855257;
#开始同步
start slave;
#查看 slave 进程状态,Slave_IO_Running、Slave_SQL_Running 两个参数 Yes 表示状态正常,注意等待主库复制的延迟秒数变为 0 Seconds_Behind_Master: 0
show slave status \G
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
同步完成以后,建立 C<A 主从,先在A节点执行如下命令,查看主库信息:
mysql -uroot -pkGXSu4fjF
show master status;
1
2
2
再从C节点执行以下命令,指定主库信息并完成 C<A 主从
mysql -uroot -pkGXSu4fjF
#指定主库信息
CHANGE MASTER TO
MASTER_HOST='节点 C 的 ip 地址',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='WB45678',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=2855257;
#开始同步
start slave;
#查看 slave 进程状态,Slave_IO_Running、Slave_SQL_Running 两个参数 Yes 表示状态正常,注意等待主库复制的延迟秒数变为 0 Seconds_Behind_Master: 0
show slave status \G
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
同步完成以后,三节点(环形)主从就搭建成功了
# 数据库初始化
#创建数据库
CREATE DATABASE wb DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE wb_gateway DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE DATABASE wb_etl DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci;
1
2
3
4
2
3
4
创建数据账户及其授权和密码修改等
#创建用户
USE mysql
CREATE USER 'wb'@'%' IDENTIFIED BY 'WB@45678';
#修改密码
ALTER USER 'wb'@'%' IDENTIFIED BY 'WB@45678' PASSWORD EXPIRE NEVER;
#赋予权限
GRANT ALL PRIVILEGES ON wb.* TO 'wb'@'%';
#取消权限
REVOKE ALL PRIVILEGES ON *.* FROM 'wb'@'%';
#刷新生效
FLUSH PRIVILEGES;
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
网页编辑 (opens new window)
最近提交: 2023/03/22, 11:52:35