规模化部署mysql5.6

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介:

 Mysql有时需要大规模部署时,我们可以使用之前的数据库做为模板然后通过rpm打包工具传递到其它主机进行批量部署。

1、首先,下载rpmbuild
yum install rpm-build -y
它是Red Hat用于打RPM包的工具。我们在编辑打包程序时,可以看到/root/rpmbuild目录下有如下文件夹。

BUILD  BUILDROOT  RPMS  SOURCES  SPECS  SRPMS

2、然后,下载源码包
http://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.20.tar.gz
并将其复制到指定的目录/root/rpmbuild/SOURCES/mysql-5.6.20.tar.gz

3、安装编译MySQL需要的依赖包
yum -y install make gcc-c++ cmake bison-devel  ncurses-devel

4、编写spec脚本

spacer.gif

其实编写spec文件本质上是在写一个回调函数,rpmbuild根据spec的回调函数,生成一个Shell脚本,打包的过程就是执行Shell脚本的过程。我们在脚本中使用CFLAGS将源码包转变为二进制安装包。

5、生成rpm

Tar zxvf mysql-5.6.20.tar.gz

Cd mysql_5.6.20

mkdir  5.6.20_mysql/rpm

cp mysql.spec  5.6.20_mysql/rpm

rpmbuild –bb ./rpm/mysql.spec    编译安装打包

执行结束后生成的rpm包就在RPMS/x86_64下了

定义配置模板,需要生成唯一的server_id

spacer.gif

6、配置ftp

Yum install vsftp

Vi /etc/vsftpd/vsftpd.conf

userlist_enable=NO

rootuser_list中去掉

root/etc/vsftpdftpusers中去掉

Service vsftpd start

7、准备所需数据

需要的数据有rpm包、my.cnfdata文件。

Tar cf data.tar ibdata1 mysql/ performance_schema/  test/   准备数据包

mysql_5.6.20.tar.gz包、my.cnf包和data.tar包放在/var/ftp/pub目录供其它server下载。

spacer.gif

8、配置自动化脚本

spacer.gif

自动化脚本主要包括rpm包安装,ftp下载,mysql’用户和组添加、文件夹赋权、数据包解压、rpm包安装和服务配置。

9、拷贝到目标服务器执行

Scp auto_mysql.txt ip:/root/

Chmod 755 auto.sh

./auto.sh &

wKioL1VsQkDiHBKRAAHfwPVK7SE089.jpg

注脚本文件:

mysql.spec

Name: mysql
Version:5.6.20
Release: %(echo $RELEASE)%{?dist}
License: GPL
URL: http://downloads.mysql.com/archives/get/file/mysql-5.5.37.tar.gz
Group: applications/database
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root 
BuildRequires: cmake
Packager: wangheng.wh@alibaba-inc.com
Autoreq: no
#Source: %{name}-%{version}.tar.gz
prefix: /usr/local/mysql
Summary: MySQL 5.6.20

%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/../makeDESTDIR=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

 

 

my.cnf

[mysqld_safe]
pid-file=/usr/local/mysql/run/mysqld.pid
#malloc-lib=/usr/local/mysql/lib/libjemalloc.so

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

[client]
port=3306
socket=/usr/local/mysql/run/mysql.sock

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

#innodb
innodb_data_home_dir=/usr/local/mysql/data
innodb_log_group_home_dir=/usr/local/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=2
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=1000
innodb_thread_concurrency=16
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=inserts
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=5
innodb_rollback_on_timeout=0
innodb_purge_threads=1
innodb_strict_mode=1
transaction-isolation=READ-COMMITTED

#myisam
key_buffer=64M
myisam_sort_buffer_size=64M
concurrent_insert=2
delayed_insert_timeout=300

#replication
master-info-file=/usr/local/mysql/log/master.info
relay-log=/usr/local/mysql/log/relaylog
relay_log_info_file=/usr/local/mysql/log/relay-log.info
relay-log-index=/usr/local/mysql/log/mysqld-relay-bin.index
slave_load_tmpdir=/usr/local/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=/usr/local/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
#sqlmod="STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE"
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
#table_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=1921681201

 

 

# vi mysql_install.sh

#!/bin/bash
# mysql auto-install script

yum install -y cmake gcc g++ bison ncurses-devel zlib

#Step 2: Create group & user
group=(more/etc/group|grepmysql)if["group" != "" ]; then
   echo "group already created!"
else
   groupadd mysql
fi

user=(more/etc/passwd|grepmysql)if["user" != "" ]; then
   echo "user already created!"
else
   useradd -g mysql mysql
fi

#Step 3: Get source
ftp -n<<EOF
open 10.243.29.65
user root test!2013
binary
cd /var/ftp/pub
mget *
EOF

#Step 3: Install
unique_id=`ifconfig | grep 'inet addr:'| grep -v '127.0.0.1' | cut -d: -f2 | awk '{ print 1}' | sed -e 's/\.//g'`  echo 'server_id='unique_id >> my.cnf
rpm -ivh mysql-5.6.20-.el6.x86_64.rpm
cp my.cnf /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql

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

mkdir -p /usr/local/mysql/log
chown -R mysql:mysql /usr/local/mysql/log

#step 4: Start MySQL
cp /usr/local/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


本文转自zsaisai 51CTO博客,原文链接:http://blog.51cto.com/3402313/1657276


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
打赏
0
0
0
0
344
分享
相关文章
MySQL原理简介—3.生产环境的部署压测
本文介绍了Java系统和数据库在高并发场景下的压测要点: 1. 普通系统在4核8G机器上每秒能处理几百个请求 2. 高并发下数据库建议使用8核16G或更高配置的机器 3. 数据库部署后需进行基准压测,以评估其最大承载能力 4. QPS和TPS的区别及重要性 5. 压测时需关注IOPS、吞吐量、延迟 6. 除了QPS和TPS,还需监控CPU、内存、磁盘IO、网络带宽 7. 影响每秒可处理并发请求数的因素包括线程数、CPU、内存、磁盘IO和网络带宽 8. Sysbench是数据库压测工具,可构造测试数据并模拟高并发场景 9. 在增加线程数量的同时,必须观察机器的性能,确保各硬件负载在合理范围
167 72
美团面试:MySQL为什么 不用 Docker部署?
45岁老架构师尼恩在读者交流群中分享了关于“MySQL为什么不推荐使用Docker部署”的深入分析。通过系统化的梳理,尼恩帮助读者理解为何大型MySQL数据库通常不使用Docker部署,主要涉及性能、管理复杂度和稳定性等方面的考量。文章详细解释了有状态容器的特点、Docker的资源隔离问题以及磁盘IO性能损耗,并提供了小型MySQL使用Docker的最佳实践。此外,尼恩还介绍了Share Nothing架构的优势及其应用场景,强调了配置管理和数据持久化的挑战。最后,尼恩建议读者参考《尼恩Java面试宝典PDF》以提升技术能力,更好地应对面试中的难题。
docker-compose部署mysql8
使用docker-compose容器化部署mysql8
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
266 26
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
109 5
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
193 3
使用Docker部署的MySQL数据库如何设置忽略表名大小写?
【10月更文挑战第1天】使用Docker部署的MySQL数据库如何设置忽略表名大小写?
817 1
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等