企业级规范架构下的数据库搭建【MySQL篇】

本文详细介绍了一种标准化的MySQL数据库环境搭建方法,涵盖从系统参数调整、软件安装到自动化脚本配置的全过程,确保搭建环境的规范化,为后续自动化、智能化运维奠定坚实基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库技术离不开数据库环境搭建。在讨论搭建环境之前,我先推荐一篇文章给大家:首席架构师白鳝:运维的进阶与哲学之道。这篇文章对我影响很大,在我还只是个纯粹单一技术思想的IT男时,它让我的思维格局都得到极大的提升。

这篇文章和数据库搭建的关系

可能有些小伙伴心里会有疑问:不就是个MySQL数据库搭建吗?如此简单的内容,而且网上文档满天飞。说好的尽量不讲网上已经存在的重复知识点呢?而且你讲搭建就专心讲,扯上面那些干嘛?就想说明你多崇拜白总吗?(没错,我确实极度崇拜他。)

我先简单解释下:本篇确实主讲MySQL搭建,但是我会在搭建时融入上述文章中提到的思想,这将使搭建更精益化、规范化,且更容易实现自动化甚至智能化。后续也会引申出不少基于这个搭建模式的知识及思想。我不想只分享纯粹的技术知识,我觉得规范化,架构化等思想更为重要。也希望小伙伴们通过我的分享,能将普通的技术知识应用到企业级的架构中去。

下面将分享一下我的搭建方法,可能大家会觉得步骤和常规的比起来略显繁琐,但为了更标准化、规范化,部分操作在手动操作的情况下是无法避免的。不过由于实现了标准化,这会让后续的自动化实现起来更加容易,所以也无需过于纠结操作的繁琐。

MySQL二进制规范搭建步骤

注意:命令行头标识如下:
# 表示root用户执行
$ 表示mysql用户执行
mysql> 表示myql命令行执行

1、规范信息:

内容 规范
版本选择 Linux 7
5.6版本:5.6.44
5.7版本:5.7.26
主机配置 4~32核
8~512G
卷规划 软件卷:/mysql
数据卷:/mydata/${PORT}
LVM管理,且软件卷和数据卷需分开,不同mysql端口实例的data卷也需分开
数据库目录 /mydata/$PORT
通过对应端口号进行区分,且在此存放如下信息:
my${PORT}.cnf文件
data目录:存放数据文件
log 目录:存放slowlog、binlog等日志文件
var 目录:存放socket等文件
tmp 目录:存放临时文件
软件目录 5.6版本:/mysql/rdbms/5.6.44
5.7版本:/mysql/rdbms/5.7.26
用于存放相应版本的软件
工具目录 工具脚本目录:/mysql/tools/script
用于存放各类工具以及脚本,比如:
crontab脚本、pt、orzdba、dbs、xtrabackup等

工具日志目录:/mysql/tools/log
用于存放工具生成的日志
域名规划 生产:<dbname>.pmysql.*.com.cn
灾备:<dbname>.smysql.*.com.cn
测试:<dbname>.mystg.*.com.cn
端口号规划 生产/备库/灾备:3308-3398
测试:3408-3498

注:下面搭建以3308端口为例

2、划盘

2.1 查看硬盘和分区信息

# fdisk -l

2.2 找到新盘,创建pv

# pvcreate /dev/vdb

2.3 创建vg

# vgcreate vg01 /dev/vdb

2.4 在刚才新建的vg上创建10G的swap的lv分区,并初始化启动

# lvcreate -L 10240 -n lv_swap vg01
# mkswap /dev/mapper/vg01-lv_swap
# swapon /dev/mapper/vg01-lv_swap

2.5 创建50G大小的软件卷lv

# lvcreate -L 50000 -n lv_rdbms vg01

2.6 将vg的剩余空间全部给新建的数据卷lv

# lvcreate -l +100%Free -n lv_data vg01

2.7 格式化创建对应lv的文件系统

# mkfs.xfs /dev/mapper/vg01-lv_data
# mkfs.xfs /dev/mapper/vg01-lv_rdbms

2.8 创建挂载点

# mkdir /mysql
# mkdir -p /mydata/3308

2.9 将相关卷写入/etc/fstab后mount -a

# echo "/dev/mapper/vg01-lv_rdbms      /mysql            xfs       defaults      0 0" >> /etc/fstab
# echo "/dev/mapper/vg01-lv_data       /mydata/3308      xfs       defaults      0 0" >> /etc/fstab
# mount -a

3、创建用户和组

创建MySQL用户和组,规范gid和uid便于避免迁移后出现特殊异常

# groupadd -g 1101 mysql
# useradd -g mysql -u 1102 mysql
# chown -R mysql:mysql /mysql
# chown -R mysql:mysql /mydata

4、调整系统参数

4.1 调整sysctl.conf

# vi /etc/sysctl.conf     
vm.swappiness = 0
net.ipv4.neigh.default.gc_stale_time = 120
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 1024
net.ipv4.tcp_synack_retries = 2
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
kernel.sysrq = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
net.ipv4.ip_local_port_range=40000 65535
net.core.wmem_default = 87380
net.core.wmem_max = 16777216
net.core.rmem_default = 87380
net.core.rmem_max = 16777216
kernel.shmmax = 4294967295
fs.nr_open=20480000
fs.aio-max-nr = 1048576

4.2 调整limits.conf
确认/etc/security/limits.conf值大于如下值

# cat /etc/security/limits.conf
* soft nofile 65535
* hard nofile 65535

4.3 参数生效

# sysctl -p

5、yum包安装

# yum -y install gcc* libaio numactl autoconf

如果需要安装orzdba工具,则需多yum如下包

# yum -y install \*perl5\* perl-Test-Simple.x86_64 perl-Time-HiRes perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-DBD-MySQL perl-DBI perl-Module-Build

6、创建目录

注意:此文档的端口以3308为例,实际端口号请以规范和需求为准

# su – mysql
$ mkdir -p /mysql/tools/script
$ mkdir -p /mysql/tools/log
$ mkdir -p /mysql/rdbms/                     
$ mkdir -p /mydata/3308/                   
$ cd /mydata/3308
$ mkdir tmp var log data

7、数据库实例信息配置

注意:使用实际端口与版本号。格式为:
端口号:实例名:版本号

$ vi /mysql/tools/script/db_info.txt                
3308:mytest:/mysql/rdbms/5.7.26

目的:可在此文件下添加多行同格式信息,用于多套mysql共存同一主机的架构。
可以通过db_info.txt以及下一步的.db_profile文件进行同主机下多套数据库的环境变量切换

8、环境变量文件

$ cd
$ vi .db_profile   
             
#.db_profile 
#!/bin/sh
awk -F: '{print $1":"$2":"$3}' /mysql/tools/script/db_info.txt
if [ ! "$1" = "" ];then
PORT=$1
else
echo -n "Please Enter database port:";
read PORT;
fi
if [ "$PORT" = "" ]; then
echo "you havn't Enter your mysql port!";
unset MYSQL_SERVER_NAME;
unset PORT;
else if awk -F: '{print $1}' /mysql/tools/script/db_info.txt|grep -w $PORT
then
export MYSQL_SERVER_NAME=`awk -F: '{if ($1 == "'$PORT'") {print $2; exit}}' /mysql/tools/script/db_info.txt`
export MYSQL_HOME=`awk -F: '{if ($1 == "'$PORT'") {print $3; exit}}' /mysql/tools/script/db_info.txt`

stty erase "^H"
stty erase "^?"
umask 022
MYSQL_DATA=/mydata/${
   PORT}/data
MYSQL_LOG=/mydata/${
   PORT}/log
TEMP=/tmp
TERM=linux
EDITOR=vi
PATH=$MYSQL_HOME/bin:$PATH
export PATH MYSQL_HOME MYSQL_DATA MYSQL_LOG TERM EDITOR TEMP

alias mysqld_mm="mysqld_unsafe --read_only=0 &"
alias mysqld_ms="mysqld_unsafe &"
alias mysql-l="${MYSQL_HOME}/bin/mysql --login-path=root --socket=/mydata/${PORT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值