Lazy loaded imagecentos stream 9
2025-1-14
| 2025-2-19
字数 3241阅读时长 9 分钟
type
summary
status
category
tags
slug
date
password
icon

零、使用经验

1. dnf与yum

CentOS Stream 9 的包管理使用 dnf 代替了传统的 yum,但 yum 是 dnf 的兼容命令,可以正常工作

一、安装包

1.常用

2.docker

docker:
鉴于国内网络问题,使用国内源
启动docker(开机自启):
配置镜像加速器:
docker-compose:
从 官方 GitHub Release 处直接下载编译好的二进制文件,上传到服务器

3. nginx

附:出现以下报错的解决方法:
配置nginx:

4. node/nvm

附:macos安装的方法:
node/nvm安装(macos)
node/nvm安装(macos)

5.mysql 8.4(docker)

mysql.sh
解释
1. 设置变量
  • root_passwd:设置 MySQL root 用户的密码为 123456。
  • master_portslave_port:分别设置主库和从库的端口号。
  • master_nameslave_name:分别设置主库和从库的容器名称。
  • grant_ip:主从库之间的 IP 范围,用于设置复制用户的访问权限。
2. 启动主库容器
  • 使用 docker run 启动 MySQL 容器。
  • --name ${master_name}:设置容器名称为 ${master_name},即 mysql_33061。
  • -h ${master_name}:设置容器的主机名。
  • -p ${master_port}:3306:映射主机的端口到容器的 3306 端口(MySQL 默认端口)。
  • -v /data/${master_name}/conf:/etc/mysql/conf.d:将主机上的配置文件挂载到容器内的 MySQL 配置目录。
  • -v /data/${master_name}/data:/var/lib/mysql:将主机上的数据目录挂载到容器内,确保数据库数据持久化。
  • -v /data/${master_name}/logs:/var/log/mysql:将主机上的日志目录挂载到容器内,方便查看 MySQL 日志。
  • -v /etc/timezone:/etc/timezone 和 -v /etc/localtime:/etc/localtime:确保容器内时区与主机一致。
  • -e MYSQL_ROOT_PASSWORD=${root_passwd}:设置 MySQL root 用户的密码。
  • --restart always:容器异常退出时自动重启。
  • -d mysql:8.0:指定使用 mysql:8.0 镜像。
3. 启动从库容器
  • 启动从库容器,配置与主库类似,唯一的不同是 --link ${master_name}:mysql_master,这表示从库将通过 mysql_master 主机名来连接主库。该参数用于 Docker 内部网络连接主从库。
4. 配置主库 my.cnf 文件
  • 这是为主库配置 my.cnf 文件,主要包括:
  • server_id=1:为主库分配唯一的服务器 ID,主从复制需要区分不同的 server_id。
  • log-bin=mysql-bin:启用二进制日志,这是主库记录所有变更的关键。
  • binlog-ignore-db=information_schema 等:忽略某些不必要的数据库,如系统库 information_schema 和 performance_schema。
  • 其他如 max_connections、slow-query-log、innodb_log_file_size 等配置,调优数据库性能。
更详细说明:
1. [mysqld]
这是 MySQL 配置文件的节(section)标识符,表示后续的配置项都是应用于 mysqld 服务(即 MySQL 服务器进程)的。
2. server_id=1
  • 作用:为 MySQL 服务器指定一个唯一的标识符。在主从复制环境中,主库的 server_id 必须唯一。
  • 为什么要设置:每个 MySQL 实例在主从复制中必须有不同的 server_id,这样主库和从库才能区分开。
3. log-bin=mysql-bin
  • 作用:启用二进制日志(binlog)。二进制日志记录了 MySQL 所有的更改操作(如 INSERT、UPDATE、DELETE),这些日志会被主库记录下来,并由从库复制。
  • 为什么要设置:启用 log-bin 是实现主从复制的关键,因为从库通过读取主库的二进制日志来同步数据。
4. binlog-ignore-db=information_schema 和 binlog-ignore-db=performance_schema
  • 作用:告诉 MySQL 在写入二进制日志时,忽略某些数据库的更改(如 information_schema 和 performance_schema)。
  • 为什么要设置:这些系统数据库通常用于存储元数据,通常不需要复制到从库,因此可以避免它们影响复制性能。
5. max_connections=2000
  • 作用:设置 MySQL 最大连接数为 2000,控制允许的最大客户端连接数。
  • 为什么要设置:在高并发的应用场景下,增加 max_connections 可以避免数据库连接数不足的情况。
6. slow-query-log=1
  • 作用:启用慢查询日志,记录执行时间超过指定阈值的查询。
  • 为什么要设置:慢查询日志有助于诊断性能瓶颈,可以找出哪些查询执行得非常慢,影响数据库性能。
7. slow-query-log-file=/var/log/mysql/mysql-slow.log
  • 作用:指定慢查询日志的保存路径。
  • 为什么要设置:指定日志文件路径可以方便后续查看和分析慢查询日志。
8. long_query_time=3
  • 作用:设置慢查询的时间阈值为 3 秒,表示执行时间超过 3 秒的查询将被记录为慢查询。
  • 为什么要设置:你可以根据业务需求调整此阈值,3 秒一般是一个比较合理的设定,超过这个时间的查询可能影响性能。
9. log-queries-not-using-indexes
  • 作用:启用日志记录没有使用索引的查询。
  • 为什么要设置:没有使用索引的查询通常效率较低,记录它们有助于开发人员发现潜在的性能问题。
10. wait_timeout=600
  • 作用:设置客户端连接在空闲状态下的超时时间(单位为秒)。如果连接在 600 秒内没有任何活动,MySQL 会关闭该连接。
  • 为什么要设置:减少空闲连接占用资源,有助于提高数据库的性能。
11. interactive_timeout=600
  • 作用:设置交互式客户端(例如 MySQL 命令行客户端)的超时时间,默认值一般较高,可以设置为较长时间避免频繁断开连接。
  • 为什么要设置:如果你在命令行中执行查询,可能需要更长的超时来等待结果。
12. innodb_log_file_size=512M
  • 作用:设置 InnoDB 存储引擎日志文件的大小。
  • 为什么要设置:增大 innodb_log_file_size 可以减少频繁的日志写入操作,提高写入性能,但同时也会增加恢复时间。
13. max_allowed_packet=20M
  • 作用:设置 MySQL 允许的最大数据包大小。
  • 为什么要设置:增大 max_allowed_packet 可以让 MySQL 处理更大的查询或结果集,特别是对于大数据量的操作,避免报错“Packet too large”。
5. 配置从库 my.cnf 文件
  • 为从库配置 my.cnf 文件,配置项与主库类似,主要区别在于:
  • server_id=2:为从库分配唯一的服务器 ID。
  • log-slave-updates:启用从库日志,记录从库上的变更。
  • slave-skip-errors=all:跳过复制过程中的错误,通常在出现不影响复制的数据错误时使用。
  • slave-net-timeout=60:设置从库与主库的连接超时。
6. 重启容器使配置生效
  • 重启主库和从库容器,以使之前配置的 my.cnf 文件生效。
7. 设置时区
  • 设置主从库的时区为 Asia/Shanghai,以确保主从库时间一致。
8. 在主库上创建复制用户并授权
  • 在主库上创建复制专用用户 repl,并授权该用户可以从主库进行复制操作:
  • CREATE USER 'repl'@'${grant_ip}' IDENTIFIED WITH mysql_native_password BY 'Repl1580':为复制设置用户 repl,并使用 mysql_native_password 插件(mysql5.7。mysql8.x改用caching_sha2_password)。
  • GRANT REPLICATION SLAVE ON *.* TO 'repl'@'${grant_ip}':授予 repl 用户复制权限。
  • GRANT ALL PRIVILEGES ON *.* TO root@'${grant_ip}' IDENTIFIED BY '${root_passwd}' WITH GRANT OPTION:授予 root 用户所有权限,并确保可以通过指定 IP 连接。
  • FLUSH PRIVILEGES:刷新权限,确保新创建的用户和权限生效。
  • DELETE FROM mysql.user WHERE host = '%' AND user = 'root':删除从任意主机连接的 root 用户,确保安全性。
9. 在从库上配置复制
 
新建账户(docker)(root被禁止外部登录):
 
  • 服务器
  • Github fork项目同步分支node/nvm安装(macos)
    Loading...