使用普通用户 部署 mysql 5.7.34 服务全过程
在企业级 linux 服务器中,出于最小权限原则(least privilege principle),不建议直接使用 root 用户运行数据库服务。这不仅可以降低误操作风险,也方便后续进行权限审计、容器化迁移、安全加固等操作。
本文将介绍如何通过普通用户 test
在 centos 7 系统下部署 mysql 5.7.34,适用于中小型服务部署、开发测试环境以及基于裸机的数据库初始化场景。
最终目录结构示意
/data/
├── app/
│ └── mysql/ # 安装目录
│ ├── bin/ # 可执行文件
│ ├── data/ # 数据目录
│ ├── log/ # 日志目录
│ └── my.cnf # 配置文件
│ └── mysqld.sh # 启动脚本
│ └── ...... # 其他文件
├── bag/
└── mysql/ # 存放压缩包
[test@mmm mysql]$ pwd /data/app/mysql [test@mmm mysql]$ ls bin data docs include lib license log man my.cnf mysqld.sh readme share support-files [test@mmm mysql]$ ll total 288 drwxrwxr-x 2 test test 4096 mar 6 09:54 bin drwxrwxr-x 10 test test 4096 mar 6 21:20 data drwxrwxr-x 2 test test 55 mar 6 09:26 docs drwxrwxr-x 3 test test 4096 mar 6 09:26 include drwxrwxr-x 5 test test 230 mar 6 09:26 lib -rw-r--r-- 1 test test 257591 mar 26 2021 license drwxrwxr-x 2 test test 29 mar 6 09:35 log drwxrwxr-x 4 test test 30 mar 6 09:26 man -rw-rw-r-- 1 test test 1469 mar 6 09:34 my.cnf -rwxr-xr-x 1 test test 10585 mar 6 09:49 mysqld.sh -rw-r--r-- 1 test test 566 mar 26 2021 readme drwxrwxr-x 28 test test 4096 mar 6 09:26 share drwxrwxr-x 2 test test 90 mar 6 09:43 support-files [test@mmm mysql]$
创建 test 用户并赋予 sudo 权限
操作用户:root
# 创建 test 用户,指定家目录和 bash 作为默认 shell adduser -m -d /home/test -s /bin/bash test # 设置 test 用户密码(此处密码为 test123456.) echo "test:test123456." | sudo chpasswd # 将 test 用户加入 wheel 组以获取 sudo 权限 usermod -ag wheel test # 查看用户组信息确认是否添加成功 groups test
切换至 test 用户并准备部署目录
# 切换到 test 用户 su - test # 进入数据目录 cd /data # 确认是否有写权限 ll /data # 若无权限,使用 sudo 赋权 sudo chmod u+w /data sudo chown -r test:test /data # 创建 mysql 安装与数据目录 mkdir -p /data/app
准备 mysql 安装包并解压
# 假设安装包已上传至 /data/bag/mysql cd /data/bag/mysql # 解压 mysql 5.7 安装包 tar xf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz # 移动解压后的内容到指定安装目录 mv mysql-5.7.34-linux-glibc2.12-x86_64/* /data/app/mysql
安装必要依赖包
# 安装 libaio 和 numactl 是 mysql 正常运行的前提 sudo yum -y install libaio sudo yum -y install numactl
配置 my.cnf 配置文件
在 /data/app/mysql
下新建或编辑 my.cnf
文件:
cd /data/app/mysql vim my.cnf
示例配置内容(可根据实际情况调整):
[mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 socket=/data/app/mysql/mysql.sock [mysqld] # 用户 user=test skip_ssl skip-name-resolve #设置3306端口 port = 3306 expire_logs_days = 10 max_binlog_size = 500m # 设置mysql的安装目录 basedir=/data/app/mysql # 设置mysql数据库的数据的存放目录 datadir=/data/app/mysql/data # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=innodb max_allowed_packet=16m key_buffer_size=32mb # innodb参数 innodb_buffer_pool_size=512mb innodb_buffer_pool_dump_at_shutdown=1 #该命令用于在关闭时把热数据dump到本地磁盘 innodb_buffer_pool_load_at_startup=1 #在启动时把热数据加载到内存 #避免双写缓冲的参数: innodb_flush_method=o_direct innodb_lock_wait_timeout=50 # 锁等待超时时间 单位秒 #启用标准innodb监视器 innodb_status_output=on # 查询缓存 #开启慢查询日志: slow_query_log=1 slow_query_log_file=master.slow long_query_time=2 #配置错误日志: log-error=/data/app/mysql/log/mysql_error.log # 复制的参数 log_bin=master-bin server_id=10 binlog_format=row sync_binlog=1 sql_mode=no_auto_create_user,no_engine_substitution # 启用gtid复制: gtid_mode=on enforce-gtid-consistency=true max_connections = 1000 max_connect_errors = 1000 wait_timeout = 30 innodb_log_file_size=1500m
常见参数说明
参数名 | 示例值 | 说明 |
---|---|---|
basedir | /data/app/mysql | mysql 的安装目录(即解压后的主目录) |
datadir | /data/app/mysql/data | 数据库的数据文件存放路径 |
port | 3306 | mysql 服务监听端口,默认是 3306 |
user | test | 启动 mysqld 进程的用户,需具有写权限 |
socket | /data/app/mysql/mysql.sock | mysql 客户端与服务器端通信使用的套接字文件 |
log-error | /data/app/mysql/log/mysql_error.log | 错误日志输出路径 |
character-set-server | utf8 / utf8mb4 | 设置默认字符集,推荐使用 utf8mb4 支持表情符等 |
default-storage-engine | innodb | 默认存储引擎 |
innodb_buffer_pool_size | 512mb | innodb 数据缓冲池大小,建议设置为物理内存的 50%-80% |
slow_query_log | 1 | 开启慢查询日志功能 |
slow_query_log_file | master.slow | 慢查询日志文件名称 |
long_query_time | 2 | 定义慢查询的阈值(单位:秒) |
log_bin | master-bin | 启用二进制日志功能,主从复制时必须开启 |
server_id | 10 | 实例 id,用于主从复制标识(每个实例唯一) |
binlog_format | row | binlog 格式,推荐使用 row |
gtid_mode | on | 启用 gtid 模式,方便主从同步管理 |
enforce-gtid-consistency | true | 强制 gtid 一致性,gtid 模式下建议启用 |
sql_mode | no_auto_create_user,no_engine_substitution | sql 模式,控制语法与行为兼容性 |
max_connections | 1000 | 最大并发连接数 |
max_connect_errors | 1000 | 最大连接失败次数 |
wait_timeout | 30 | 空闲连接超时时间(单位:秒) |
innodb_log_file_size | 1500m | innodb 重做日志文件大小 |
sync_binlog | 1 | 每次事务提交都同步写 binlog,提升数据安全性 |
初始化数据库
# 创建数据目录和日志文件 cd /data/app/mysql mkdir -p data log touch log/mysql_error.log # 初始化数据库 cd bin ./mysqld --defaults-file=/data/app/mysql/my.cnf --initialize --user=test --basedir=/data/app/mysql/ --datadir=/data/app/mysql/data/
注意:初始化成功后,log/mysql_error.log
中会包含 root 用户的临时密码。
配置启动脚本并设置环境变量
# 回到主目录 cd /data/app/mysql # 复制默认启动脚本并重命名 cp support-files/mysql.server ./mysqld.sh ################################### # 修改启动脚本内容(可根据需求调整basedir、datadir、conf等) 46 basedir=/data/app/mysql/ 47 datadir=/data/app/mysql/data/ 206 conf=/data/app/mysql/my.cnf ################################### # 添加 mysql bin 路径至环境变量 echo 'export path=/data/app/mysql/bin:$path' >> ~/.bashrc source ~/.bashrc
启动 mysql 服务并测试连接
# 启动 mysql ./mysqld.sh start # 查看运行状态 ./mysqld.sh status ps -ef | grep mysql netstat -nltp | grep 3306 # 登录测试(使用初始化生成的密码或修改后的密码) mysql -u root -p
或:
# 若你已设置新密码: mysql -u root -p'test123456.'
常用操作总结
# 停止 mysql 服务 ./mysqld.sh stop # 重启 mysql 服务 ./mysqld.sh restart # 查看 mysql 日志 cat /data/app/mysql/log/mysql_error.log
注意事项
- 非 root 用户安装需保证目录权限正确;
--initialize
只运行一次,否则会清空已有数据;my.cnf
配置文件中路径需确保存在;- 若启动失败,优先查看
mysql_error.log
; mysqld.sh
脚本可考虑写入 systemd 或 crontab 启动;
结语
通过以上步骤,我们成功使用普通用户 test
完成了 mysql 5.7.34 的部署。这种方式不仅提升了安全性,也为后续自动化部署和多用户运维打下了基础。
到此这篇关于centos7系统下部署mysql 5.7.34服务全过程的文章就介绍到这了,更多相关mysql 5.7.34部署内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论