君玉自牧 君玉自牧
首页
  • Linux
  • Nginx
  • MySQL
  • Redis
  • Kafka
  • Docker
  • Jenkins
  • Oneindex
  • Bitwarden
  • Confluence
  • Photogallery
  • 智能手机
  • 上古卷轴
  • 健身记录
  • 站点相关
  • 未完待续
GitHub (opens new window)
首页
  • Linux
  • Nginx
  • MySQL
  • Redis
  • Kafka
  • Docker
  • Jenkins
  • Oneindex
  • Bitwarden
  • Confluence
  • Photogallery
  • 智能手机
  • 上古卷轴
  • 健身记录
  • 站点相关
  • 未完待续
GitHub (opens new window)
  • 技术架构

  • 桌面维护

  • 网络工程

  • 系统运维

    • Linux

    • Apache

    • Nginx

    • MySQL

      • MySQL 安装部署 & 项目实践
        • 解压并且安装
        • 修改配置文件
        • 服务相关命令
        • 集群部署相关
          • 环形主从
        • 数据库初始化
      • MySQL 主从复制 & 读写分离
      • MySQL 相关设置 & 性能调优
      • MySQL 数据备份 & 迁移恢复
      • MySQL v5.7.9 安装部署
      • MySQL 事务 & 视图 & 索引
      • MySQL 慢查询 & 可视化分析
      • MySQL 位运算函数
      • SQL 语法入门
    • Redis

    • MQ

    • ELK

    • Nacos

    • PostgreSQL

    • MongoDB

  • 环境搭建

  • 容器编排

  • 持续集成

  • 监控告警

  • 项目实践

  • 脚本开发

  • 前端开发

  • 后端开发

  • 效率工具

目录

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

# 修改配置文件

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

输入以下命令初始化数据库服务

/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

# 服务相关命令

使用以下命令添加环境变量:

echo "export MYSQL_HOME=/app/service/mysql" >> ~/bashrc
echo "export PATH=\$PATH:\$MYSQL_HOME/bin" >> ~/bashrc
#加载环境变量,使其生效
source ~/bashrc
1
2
3
4

或者创建软连接

#添加相关命令的软连接(root 权限运行)
ln -s /app/service/mysql/bin/mysql* /usr/bin/
1
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

其他命令

#本地登录
mysql -uroot -p'fjphty:BI96t'
#修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'kGXSu4fjF' PASSWORD EXPIRE NEVER;
1
2
3
4

# 集群部署相关

设置之前关闭所有数据库

# 环形主从

A、B、C三个节点分别按上述步骤部署好数据库,配置好时间同步;然后两两设置主从,如:A<B、B<C、C<A,主从设置步骤:

  1. 主从服务器节点设置不同的 server-id
  2. 启用二进制日志和 relaylog
  3. 主节点创建一个拥有复制权限的用户账号
  4. 查询主节点 binlog 信息
  5. 设置从节点同步主节点

修改数据库配置文件,[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
service mysql srart
mysql -uroot -p''
show master status;
1
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

然后采用逆序启动,C-B-A,即先设置 B<C 主从,启动C节点的 MySQL,执行以下命令,查看主库信息:

mysql -uroot -pkGXSu4fjF
show master status;
1
2

image.png 再启动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

同步完成以后,建立 A<B 主从,先在B节点执行如下命令,查看主库信息:

mysql -uroot -pkGXSu4fjF
show master status;
1
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

同步完成以后,建立 C<A 主从,先在A节点执行如下命令,查看主库信息:

mysql -uroot -pkGXSu4fjF
show master status;
1
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

同步完成以后,三节点(环形)主从就搭建成功了

# 数据库初始化

#创建数据库
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

创建数据账户及其授权和密码修改等

#创建用户
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
网页编辑 (opens new window)
最近提交: 2023/03/22, 11:52:35
高可用实现:Keepalived
MySQL 主从复制 & 读写分离

← 高可用实现:Keepalived MySQL 主从复制 & 读写分离→

Theme by Vdoing | Copyright © 2011-2023 | 君玉自牧
粤ICP备15057965号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式