千家信息网

MySQL如何自动化安装部署

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章给大家分享的是有关MySQL如何自动化安装部署的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1、制作符合自己需求的RPM包我们要根据MySQL的源码编译符合企业需求
千家信息网最后更新 2026年11月02日MySQL如何自动化安装部署

这篇文章给大家分享的是有关MySQL如何自动化安装部署的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。



1、制作符合自己需求的RPM包

我们要根据MySQL的源码编译符合企业需求的RPM包,源码获取命令如下:

wget http://downloads.mysql.com/archives/get/file/mysql-5.6.16.tar.gz
tar -zxvf mysql-5.6.16.tar.gz
cd mysql-5.6.16
mkdir rpm
cd rpm

在上面我们获取了源码,并在源码主目录下创建rpm目录,接着我们在该目录下创建mysql.spec文件:

Name: mysql
Version:5.6.16
Release: guahao
License: GPL
URL: http://downloads.mysql.com/archives/get/file/mysql-5.6.16.tar.gz
Group: applications/database
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: cmake
Packager: zhuxj@guahao.com
Autoreq: no
prefix: /opt/mysql
Summary: MySQL 5.6.16

%description
The MySQL(TM) software delivers a very fast, multi-threaded, multi-user,
and robust SQL (Structured Query Language) database server. MySQL Server
is intended for mission-critical, heavy-load production systems as well
as for embedding into mass-deployed software.

%define MYSQL_USER mysql
%define MYSQL_GROUP mysql
%define __os_install_post %{nil}

%build
cd $OLDPWD/../
CFLAGS="-O3 -g -fno-exceptions -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
CXX=g++
CXXFLAGS="-O3 -g -fno-exceptions -fno-rtti -static-libgcc -fno-omit-frame-pointer -fno-strict-aliasing"
export CFLAGS CXX CXXFLAGS

cmake . \
-DSYSCONFDIR:PATH=%{prefix} \
-DCMAKE_INSTALL_PREFIX:PATH=%{prefix} \
-DCMAKE_BUILD_TYPE:STRING=Release \
-DENABLE_PROFILING:BOOL=ON \
-DWITH_DEBUG:BOOL=OFF \
-DWITH_VALGRIND:BOOL=OFF \
-DENABLE_DEBUG_SYNC:BOOL=OFF \
-DWITH_EXTRA_CHARSETS:STRING=all \
-DWITH_SSL:STRING=bundled \
-DWITH_UNIT_TESTS:BOOL=OFF \
-DWITH_ZLIB:STRING=bundled \
-DWITH_PARTITION_STORAGE_ENGINE:BOOL=ON \
-DWITH_INNOBASE_STORAGE_ENGINE:BOOL=ON \
-DWITH_ARCHIVE_STORAGE_ENGINE:BOOL=ON \
-DWITH_BLACKHOLE_STORAGE_ENGINE:BOOL=ON \
-DWITH_PERFSCHEMA_STORAGE_ENGINE:BOOL=ON \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE:BOOL=ON \
-DWITH_EMBEDDED_SERVER=0 \
-DINSTALL_LAYOUT:STRING=STANDALONE \
-DCOMMUNITY_BUILD:BOOL=ON \
-DMYSQL_SERVER_SUFFIX='-r5436';

make -j `cat /proc/cpuinfo | grep processor| wc -l`

%install
cd $OLDPWD/../
make DESTDIR=$RPM_BUILD_ROOT install

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-, %{MYSQL_USER}, %{MYSQL_GROUP})
%attr(755, %{MYSQL_USER}, %{MYSQL_GROUP}) %{prefix}/*

%pre

%post
ln -s %{prefix}/lib %{prefix}/lib64

%preun

%changelog

有了这个spec文件之后,就可以执行如下命令生成我们自己的RPM包:
rpmbuild -bb ./mysql.spec


2、编写my.cnf模板
my.cnf模板如下:

[mysqld_safe]
pid-file=/opt/mysql/run/mysqld.pid

[mysql]
prompt=\\u@\\d \\r:\\m:\\s>
default-character-set=gbk
no-auto-rehash

[client]
socket=/opt/mysql/run/mysql.sock

[mysqld]
#dir
basedir=/opt/mysql
datadir=/data/mysql/data
tmpdir=/data/mysql/tmp
log-error=/data/mysql/log/alert.log
slow_query_log_file=/data/mysql/log/slow.log
general_log_file=/data/mysql/log/general.log
socket=/opt/mysql/run/mysql.sock

#innodb
innodb_data_home_dir=/data/mysql/data
innodb_log_group_home_dir=/data/mysql/data
innodb_data_file_path=ibdata1:2G;ibdata2:16M:autoextend
innodb_buffer_pool_size=10G
innodb_buffer_pool_instances=4
innodb_log_files_in_group=4
innodb_log_file_size=1G
innodb_log_buffer_size=200M
innodb_flush_log_at_trx_commit=1
innodb_additional_mem_pool_size=20M
innodb_max_dirty_pages_pct=60
innodb_io_capacity=200
innodb_thread_concurrency=32
innodb_read_io_threads=8
innodb_write_io_threads=8
innodb_open_files=60000
innodb_file_format=Barracuda
innodb_file_per_table=1
innodb_flush_method=O_DIRECT
innodb_change_buffering=all
innodb_adaptive_flushing=1
innodb_old_blocks_time=1000
innodb_stats_on_metadata=0
innodb_read_ahead=0
innodb_use_native_aio=0
innodb_lock_wait_timeout=50
innodb_rollback_on_timeout=0
innodb_purge_threads=1
innodb_strict_mode=1
transaction-isolation=READ-COMMITTED

#myisam
key_buffer_size=100M
myisam_sort_buffer_size=64M
concurrent_insert=2
delayed_insert_timeout=300

#replication
master-info-file=/data/mysql/log/master.info
relay-log=/data/mysql/log/mysql-relay
relay_log_info_file=/data/mysql/log/mysql-relay.info
relay-log-index=/data/mysql/log/mysql-relay.index
slave_load_tmpdir=/data/mysql/tmp
slave_type_conversions="ALL_NON_LOSSY"
slave_net_timeout=4
skip-slave-start
sync_master_info=1000
sync_relay_log_info=1000

#binlog
log-bin=/data/mysql/log/mysql-bin
server_id=2552763370
binlog_cache_size=32K
max_binlog_cache_size=2G
max_binlog_size=500M
binlog_format=ROW
sync_binlog=1000
log-slave-updates=1
expire_logs_days=0

#server
default-storage-engine=INNODB
character-set-server=gbk
lower_case_table_names=1
skip-external-locking
open_files_limit=65536
safe-user-create
local-infile=1
performance_schema=0

log_slow_admin_statements=1
log_warnings=1
long_query_time=1
slow_query_log=1
general_log=0

query_cache_type=0
query_cache_limit=1M
query_cache_min_res_unit=1K

table_definition_cache=65536

thread_stack=512K
thread_cache_size=256
read_rnd_buffer_size=128K
sort_buffer_size=256K
join_buffer_size=128K
read_buffer_size=128K

port=3306
skip-name-resolve
skip-ssl
max_connections=4500
max_user_connections=4000
max_connect_errors=65536
max_allowed_packet=128M
connect_timeout=8
net_read_timeout=30
net_write_timeout=60
back_log=1024

#server id
细心的读者应该会注意在,在my.cnf的末尾在server id上留了空白,在后面的shell脚本会动态加上,这是因为在一个企业内部的所有MySQL的server id必须保持全局一致性,这样在主备复制时才不会导致混乱。
其实如果想把这个脚本写的更通用,完全可以把更多的参数留白,如port、datadir、内存相关参数等,这里我只是以server id为例,抛砖引玉。

3、准备MySQL数据目录模板

你得事先准备一台MySQL,可以根据自己的需求,把通用性的东西放在上面(如账户等),下面是一个最简单的已安装好的MySQL的数据目录结构:

[root@lx25 mysql]# ls -l
total 12
drwxr-xr-x 5 mysql mysql 4096 Jul 2 09:26 data
drwxr-xr-x 2 mysql mysql 4096 Jul 1 18:21 log
drwxr-xr-x 2 mysql mysql 4096 Jul 2 09:26 tmp
[root@lx25 mysql]# cd data
[root@lx25 data]# ls -l
total 6314044
drwx------ 2 mysql mysql 4096 Jul 1 17:17 mysql
drwx------ 2 mysql mysql 4096 Jul 1 17:17 performance_schema
drwx------ 2 mysql mysql 4096 Jul 1 17:17 test

把该目录用tar打包(命名为data.tar),然后以这个为模板解压至新装MySQL实例的数据目录下即可。

4、编写自动化安装部署脚本

在运行这个脚本之前,我们必须得把前面几部制作的rpm包、my.cnf模板和数据目录模板放到一个固定的地方,本例中是放在企业内部的ftp上。

MySQL自动化安装部署脚本(命名为:mysql_install.sh)如下:

#!/bin/sh

#Step 1: Prepare
yum install cmake gcc g++ bison ncurses-devel zlib

groupadd mysql
useradd -g mysql mysql

#Step 2: Get Source
ftp -n<open 10.10.100.254
user zhuxianjie zxj321
binary
cd mysql
prompt
mget *
EOF

#Step 3: Install
unique_id=`date "+%Y%m%d%M%S"`
echo 'server_id='$unique_id >> my.cnf
rpm -ivh mysql-5.6.16-guahao.x86_64.rpm
cp my.cnf /opt/mysql
chown -R mysql:mysql /opt/mysql

tar xvf data.tar -C /data
chown -R mysql:mysql /data/mysql

#step 4: Start MySQL
cp /opt/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
chmod 755 /etc/init.d/mysqld
chkconfig mysqld on

/etc/init.d/mysqld start


附件1:(MySQL编译参数)

CMAKE_BUILD_TYPE

编译的版本类型:RelWithDebInfo和Debug,不同之处是RelWithDebInfo会进行优化。

CMAKE_INSTALL_PREFIX

指定make install安装的目标路径。

SYSCONFDIR

指定配置文件的默认路径。

MYSQL_DATADIR

指定data目录的默认路径。

WITH_DEBUG

指定是否有debugging信息,一般用于源码调试时,打开WITH_DEBUG,生产环境关闭。

ENABLED_PROFILING

指定是否可以使用show profile显示操作执行的详细信息。

DEFAULT_CHARSET

指定默认字符集,可以在启动的配置文件中指定。

DEFAULT_COLLATION

指定默认字符比较、排序的规则。

WITH_EXTRA_CHARSETS

指定其他可能使用的字符集。

WITH_SSL

指定SSL的类型,从5.6.6开始默认bundled类型,此外也可以指定SSL库的路径地址。

WITH_ZLIB

指定zlib的类型,用于压缩功能。

WITH_storage_STORAGE_ENGINE

指定编译支持的存储引擎,默认支持MyISAM,MERGE,MEMORY,CSV存储引擎。

ENABLED_LOCAL_INFILE

指定是否允许使用load data infile功能。

WITH_EMBEDDED_SERVER

指定是否编译libmysqld嵌入式库。

INSTALL_LAYOUT

指定安装的布局类型。

感谢各位的阅读!关于"MySQL如何自动化安装部署"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

目录 模板 源码 类型 脚本 编译 自动化 数据 文件 路径 企业 参数 字符 更多 需求 信息 内容 功能 命令 字符集 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 华服互联网科技靠谱吗 互联网是第几次科技革命的成果 互联网的科技 腾讯阿里互联网科技 无线互联网科技 易通互联网络科技有限公司 睿民互联网科技 昭通云南众福互联网科技有限公司 佛山市拉法互联网科技有限公司 滨湖区互联网智能科技产品有哪些 小米互联网科技园入驻 江苏苏星互联网科技有限公司 互联网风格科技公司名称 抖集互联网科技技术咨询 广州梦谷互联网科技有限公司领导 互联网公司属于科技吗 张家口科技产业互联网平台 保山互联网科技靠谱吗 银川新华互联网科技学校原画 山东蛋芒互联网科技有限公司 互联网科技海报 科技互联网企业 善班互联网科技 互联网与新科技 上海电发互联网科技有限公司 中科明德北京互联网科技 张召忠谈中国互联网科技 互联网科技包装股 现代互联网科技公司 武汉亿视互联网科技有限公司
0