分享MySQL的自動化安裝部署的方法
有過MySQL運維的人應該都清楚,線上的MySQL一般都採用原始碼編譯,因為這樣才可以根據企業的各自需要選擇要編譯的功能,雖然MySQL的原始碼編譯挺簡單的,但是試想一下,如果你有幾百臺伺服器同時要安裝MySQL,難道你還一臺臺去手動編譯、編寫配置檔案嗎?這顯然太低效了,本文討論MySQL的自動化安裝部署。
1、製作符合自己需求的RPM包
我們要根據MySQL的原始碼編譯符合企業需求的RPM包,原始碼獲取命令如下:
wget
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:
Group: applications/database
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: cmake
Packager:
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 >
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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28686045/viewspace-2142220/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 生產庫自動化MySQL5.6安裝部署詳細教程MySql
- 自動化測試之:Jenkins安裝與部署Jenkins
- Mysql5.6 自動化部署MySql
- jenkins的安裝和配置(flask結合jenkins半自動化部署流程)JenkinsFlask
- mysql安裝教程8.0.26 安裝mysql的步驟和方法MySql
- 自動化指令碼安裝mysql shell指令碼範例指令碼MySql
- MySQL8.0的自動部署指令碼MySql指令碼
- Ansible自動化部署工具-role模式安裝filebeat實際案例分析模式
- 使用PowerShell/CMD自動化安裝並配置MySQL資料庫MySql資料庫
- [自動化]基於kolla的自動化部署ceph叢集
- 陷入jenkins自動化部署的坑Jenkins
- Linux安裝mysql的幾種方法LinuxMySql
- 自動化測試框架Selenium的使用——安裝Selenium框架
- mydumper自動化安裝指令碼指令碼
- Jenkins 自動化安裝外掛Jenkins
- Gitlab自動部署之二:安裝GITLAB-RUNNERGitlab
- 在 Ubuntu 上自動化安裝基本應用的方法Ubuntu
- windows安裝mysql以及安裝Navicat Premium並破解的方法WindowsMySqlREM
- MySQL概述以及MySQL的安裝以及啟動MySql
- mysql8.0.30的RPM包安裝方法MySql
- Debian中完全解除安裝MySQL的方法MySql
- Maven 自動化部署Maven
- Maven自動化部署Maven
- K8S搭建自動化部署環境 Jenkins下載、安裝和啟動K8SJenkins
- MySQL所有的安裝部署方式MySql
- hadoop的安裝部署Hadoop
- flume的安裝部署
- postgresql的安裝和啟動方法SQL
- mongodb的安裝和啟動方法MongoDB
- mysql免安裝版的實際配置方法MySql
- MySQL 的安裝MySql
- 無人值守自動化安裝系統
- PXE實現系統自動化安裝
- 通過 PXE 自動化安裝 Ubuntu ServerUbuntuServer
- mysql5.7GeleraCluster安裝部署(二)MySql
- go 的自動過載工具安裝Go
- Gitlab自動部署之一:阿里雲安裝Gitlab筆記Gitlab阿里筆記
- [自動化]基於kolla部署的openstack自動化巡檢生成xlsx報告
- MySQL的原始碼安裝及使用UDFs進行資料自動更新的教程MySql原始碼