当前位置: 首页 > news >正文

服务器部署 CentOS、VeraCrypt、Docker、主从MySQL、Redis、备份等

本文首发在 这里

服务器系统使用 CentOS 7.x

考虑数据安全,一般会选用 VeraCrypt

  • 安装依赖

yum install fuse fuse-libs

  • 官网获取对应系统的最新下载链接进行安装

rpm -ivh https://launchpad.net/veracrypt/trunk/1.24-update7/+download/veracrypt-console-1.24-Update7-CentOS-7-x86_64.rpm

  • 创建加密文件,Filesystem 请选择 Linux Ext4

veracrypt -t -c

  • 挂载和卸载
mkdir /home/work
veracrypt /home/data /home/work
veracrypt -d

考虑各种方便,请选用 Docker 安装 MySQL 和 Redis

  • 安装并启动
yum install docker
service docker start

若服务器在国内,不能成功拉取镜像,可以考虑为 Docker 使用镜像加速器

/etc/docker/daemon.json 增加 "registry-mirrors": ["https://hub-mirror.c.163.com"] 后重启 Docker

  • 拉取并开启服务
docker pull mysql:5.7.32
docker pull redis

mkdir -p /home/work/docker/mysql/data
mkdir -p /home/work/docker/redis/data

vi /home/work/docker/mysql/mysqld.cnf
vi /home/work/docker/redis/redis.conf

docker run --privileged --name mysql -p 127.0.0.1:3306:3306 -v /home/work/docker/mysql/data:/var/lib/mysql -v /home/work/docker/mysql/mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d mysql:5.7.32
docker run --privileged --name redis -p 127.0.0.1:6379:6379 -v /home/work/docker/redis/data:/data -v /home/work/docker/redis/redis.conf:/etc/redis.conf -e TZ=Asia/Shanghai -d redis redis-server /etc/redis.conf

可以考虑为每个容器创建 run.sh 备忘 docker run ... 命令,便于日后重置容器,譬如修改监听地址或端口

  • 带特殊符号的数据库密码,可以加单引号或使用环境变量
-e MYSQL_ROOT_PASSWORD='qwe123!@#&'
-e MYSQL_ROOT_PASSWORD="$MYSQL_ROOT_PASSWORD"
  • 导出和导入,确保多服务器使用相同版本
docker image save -o mysql.tar mysql:5.7.32
docker image load -i mysql.tar

Redis 配置

requirepass password
save 86400 1
stop-writes-on-bgsave-error no

MySQL 主配置

[mysqld]
event_scheduler = 1
max_connections = 10000

general_log = 1
log_timestamps = SYSTEM
general_log_file = mysql_general.log

server-id = 1
log-bin = mysql-bin
binlog-ignore-db = information_schema,mysql,performance_schema,sys,test
expire_logs_days = 15

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

MySQL 从配置

[mysqld]
server-id = 2
read_only = 1
super_read_only = 1
log-bin = mysql-bin
relay_log = mysql-relay
binlog-ignore-db = information_schema,mysql,performance_schema,sys,test
expire_logs_days = 15
log-slave-updates = ON

创建容器时若直接使用从库配置请先注释 super_read_only,成功后请取消注释,避免人为手动修改

MySQL 主从同步

SHOW MASTER STATUS\G;
CHANGE MASTER TO MASTER_HOST='192.168.1.1', MASTER_PORT=3306, MASTER_USER='root', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
START SLAVE;
SHOW SLAVE STATUS\G;

数据备份和恢复

只读从库定期备份

0 3 */7 * * /home/work/backup/backup.sh
#!/bin/bash
cd /home/work/backup
find . -name '202*.sql' -mtime +8 -delete
find tar -name '202*.tar.gz' -mtime +8 -delete
docker exec mysql sh -c 'exec mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --events --routines --master-data=2 --databases game data' > $(date +%Y_%m_%d).sql
tar zcf tar/$(date +%Y_%m_%d).tar.gz $(date +%Y_%m_%d).sql

可考虑部署文件服务并定期在其它服务器拉取备份文件

docker exec -i mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /home/work/docker/mysql/all-databases.sql

若非停机备份主库却想恢复最新数据请参考 mysqldump + mysqlbinlog for Backup and Restore

日志备份

0 0 * * * /home/work/mysql_general_log/rotate.sh
#!/bin/bash
docker exec mysql sh -c 'exec mv /var/lib/mysql/mysql_general.log /var/lib/mysql/mysql_general.log.bak'
docker exec mysql sh -c 'exec mysqladmin -p"$MYSQL_ROOT_PASSWORD" flush-logs general'

cd /home/work/mysql_general_log
mv /home/work/docker/mysql/data/mysql_general.log.bak mysql_general.log
tar zcf $(date +%Y_%m_%d_%H).tar.gz mysql_general.log
find . -name '202*.tar.gz' -mtime +8 -delete

相关文章:

  • 【Python深度学习】Python全栈体系(三十三)
  • 电脑重装系统后Win11扬声器无插座信息如何解决?
  • 在Ubuntu 16.04中安装RStudio Server
  • 微服务统一认证方案
  • PMP知识的应用思考
  • 详谈js之面向对象
  • 深度学习笔记其三:多层感知机和PYTORCH
  • iOS小技能:截获分析网络数据包( tcpdump 、Wireshark的原理和基本使用 、使用Charles联调测试)
  • 阿里 Java 程序员进阶笔记!计算机基础 +OS+ 算法数据结构
  • Revit MEP中连接件的巧妙定位?及管线快速连接?
  • SP94-PEG-DSPE,DSPE-PEG-SP94,磷脂-聚乙二醇-靶向肽SP94
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • 获取两个时间的区间
  • 神经调节的知识网络图,图神经网络与知识图谱
  • HBase优化
  • __proto__ 和 prototype的关系
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • 【面试系列】之二:关于js原型
  • 2019.2.20 c++ 知识梳理
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • dva中组件的懒加载
  • E-HPC支持多队列管理和自动伸缩
  • Leetcode 27 Remove Element
  • PHP CLI应用的调试原理
  • Redash本地开发环境搭建
  • Vim Clutch | 面向脚踏板编程……
  • Vue.js-Day01
  • 对话:中国为什么有前途/ 写给中国的经济学
  • 开源SQL-on-Hadoop系统一览
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 坑!为什么View.startAnimation不起作用?
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 浅谈Golang中select的用法
  • 实现简单的正则表达式引擎
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #NOIP 2014# day.1 T2 联合权值
  • #我与Java虚拟机的故事#连载09:面试大厂逃不过的JVM
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (31)对象的克隆
  • (AngularJS)Angular 控制器之间通信初探
  • (C++17) std算法之执行策略 execution
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (算法)求1到1亿间的质数或素数
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复