有过MySQL运维的人应该都清楚,线上的MySQL一般都採用源代码编译,由于这样才干够依据企业的各自须要选择要编译的功能,尽管MySQL的源代码编译挺简单的,可是试想一下,假设你有几百台server同一时候要安装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 CXXFLAGScmake .                                                  \-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=0log_slow_admin_statements=1
log_warnings=1
long_query_time=1
slow_query_log=1
general_log=0query_cache_type=0
query_cache_limit=1M
query_cache_min_res_unit=1Ktable_definition_cache=65536thread_stack=512K
thread_cache_size=256
read_rnd_buffer_size=128K
sort_buffer_size=256K
join_buffer_size=128K
read_buffer_size=128Kport=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/mysqltar 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

转载于:https://www.cnblogs.com/yxwkf/p/3849068.html

[MySQL] MySQL的自己主动化安装部署相关推荐

  1. mysql数据实时同步:Canal安装部署、kafka安装、zk安装、mysql安装、Canal Server+Canal Client HA,Canal+mysql+Kafka,相关验证(学习笔记)

    目录 Canal安装部署 1.1. 服务器准备 1.2. 设置主机名并配置hosts 1.3. 免密设置 1.4. 设置ntp时间 1.5. 关闭防火墙 1.6. 关闭selinux 1.7. 安装J ...

  2. 最新 MySQL 8.0.32 在Win10安装部署(详细)

    一.前言   MySQL官方Windows版下载地址:https://dev.mysql.com/downloads/installer/     本教程详细指导如何在Win10系统下安装部署最新版M ...

  3. mysql ogg_异构平台mysql-oracle(ogg)安装部署

    如图所示:源端采用Mysql库,目标端采用Oracle库 一.OGG安装配置(源端) 1.OGG下载 ※Mysql to Oracle注意事项※ 1. Supported data types for ...

  4. ERPnext:容器化安装部署步骤

    ERPnext(一) 前言 ERPnext是GitHub上开源的最热门的ERP项目之一,它的开源协议是GPL-3.0,因此自由度高,无需担心版权问题.ERPnext项目设计简单且使用PYTHON语言实 ...

  5. presto联合查询mysql和ES_presto-mysql/elasticsearch6.0.0安装部署测试,异种数据源关联查询入门实践...

    本文简单记录一次实践使用过程,涉及presto-mysql,presto-elasticsearch,文中参数未做注释,请参考官方文档,希望能帮到大家 1 下载安装 presto-0.228 < ...

  6. ubuntu linux kvm安装,基于Ubuntu 14.04 KVM拟化安装部署

    1. 宿主机环境(dell备份服务器) Ubuntu 14.04 LTS 64位 内存:16G 硬盘:2T 2. 确认CPU是否支持硬件虚拟化 root@linuxidc:~# egrep -o '( ...

  7. linux 下安装部署mq,RocketMQ在linux下安装部署

    本博客以当前RocketMQ最新版介绍:v4.4.0 环境要求 64位JDK 1.8+; Maven 3.2.x; // 源码编译时需要用到 二进制文件安装 > unzip rocketmq-a ...

  8. 企业实战_18_MyCat_ZK集群安装部署

    接上一篇:企业实战_17_MyCat水平扩展_跨分片查询_ER分片 https://gblfy.blog.csdn.net/article/details/100066013 文章目录 一.使用ZK记 ...

  9. 【金阳光測试】大话Android自己主动化測试--Android自己主动化系列(1)--金阳光于2013年4月份...

    Android自己主动化測试框架和工具在四年多的发展日趋成熟. 从五年前的第一代自己主动化架构演进到眼下第四代(本系列讲座第7篇后将具体剖析第三代和第四代自己主动化框架)从曾经最早谷歌推崇的monke ...

最新文章

  1. 分享10个值得关注的C语言开源项目
  2. Centos 6.5 安装 Nginx+MySQL+PHP
  3. 2020年市场最缺什么_2020年资本市场回顾
  4. 朋友圈发送照片泄露位置?微信:P 完再发!
  5. Python web爬虫
  6. linux bzip指定名称,Linux基础命令---bzip2
  7. carbon----代码美化工具
  8. 网页设计与制作项目教程HTML+CSS+JavaScript之项目二
  9. 【Flash】关于Flash停止支持相关问题总结
  10. 死亡洞穴(cave)
  11. PG如何影响数据分布
  12. 【算法专题】数独问题详解
  13. js基础系列之函数调用与this
  14. 第二十二章 Unity 光照贴图
  15. 如何与陌生人交谈的技巧
  16. 主成分有什么用?如何进行呢?
  17. 计算机组成原理实验——实验1 运算器实验
  18. python 实践--新闻聚合
  19. 函数式编程[Lambda 表达式,Optional,Stream流]从入门到精通(一)
  20. 来看一看那些已经倒闭的互联网公司

热门文章

  1. [YTU]_2576( 虚函数练习:动物2)
  2. 【QuantOS】jaqs实例代码(可以使用版本)
  3. 复合高斯积分(节点数小于等于3的版本Python实现)
  4. 复合五点高斯公式计算(Python实现)
  5. 方程组求解matlab实现(朴素高斯求解、LU分解、雅可比迭代方法、高斯-塞德尔方法、连续过松弛(SOR))
  6. 【学习笔记】斜率优化
  7. 给自己一点恒心,加油打气~
  8. HTML5 新增内容
  9. POJ2104 K-th Number [分块做法]
  10. 敏捷之旅杭州站演讲PPT(敏捷开发在淘女郎)