加入收藏 | 设为首页 | 会员中心 | 我要投稿 南平站长网 (https://www.0599zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL如何自动化安装部署

发布时间:2021-12-24 12:48:54 所属栏目:MySql教程 来源:互联网
导读:这篇文章给大家分享的是有关MySQL如何自动化安装部署的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 1、制作符合自己需求的RPM包 我们要根据MySQL的源码编译符合企业需求的RPM包,源码获取命令如下: wget http://downloads.
这篇文章给大家分享的是有关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<<EOF
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如何自动化安装部署”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

(编辑:南平站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读