溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL如何自動(dòng)化安裝部署

發(fā)布時(shí)間:2021-11-06 14:09:11 來(lái)源:億速云 閱讀:117 作者:小新 欄目:MySQL數(shù)據(jù)庫(kù)

這篇文章給大家分享的是有關(guān)MySQL如何自動(dòng)化安裝部署的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。



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

我們要根據(jù)MySQL的源碼編譯符合企業(yè)需求的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

在上面我們獲取了源碼,并在源碼主目錄下創(chuàng)建rpm目錄,接著我們?cè)谠撃夸浵聞?chuàng)建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

有了這個(gè)spec文件之后,就可以執(zhí)行如下命令生成我們自己的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
細(xì)心的讀者應(yīng)該會(huì)注意在,在my.cnf的末尾在server id上留了空白,在后面的shell腳本會(huì)動(dòng)態(tài)加上,這是因?yàn)樵谝粋€(gè)企業(yè)內(nèi)部的所有MySQL的server id必須保持全局一致性,這樣在主備復(fù)制時(shí)才不會(huì)導(dǎo)致混亂。
其實(shí)如果想把這個(gè)腳本寫的更通用,完全可以把更多的參數(shù)留白,如port、datadir、內(nèi)存相關(guān)參數(shù)等,這里我只是以server id為例,拋磚引玉。

3、準(zhǔn)備MySQL數(shù)據(jù)目錄模板

你得事先準(zhǔn)備一臺(tái)MySQL,可以根據(jù)自己的需求,把通用性的東西放在上面(如賬戶等),下面是一個(gè)最簡(jiǎn)單的已安裝好的MySQL的數(shù)據(jù)目錄結(jié)構(gòu):

[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),然后以這個(gè)為模板解壓至新裝MySQL實(shí)例的數(shù)據(jù)目錄下即可。

4、編寫自動(dòng)化安裝部署腳本

在運(yùn)行這個(gè)腳本之前,我們必須得把前面幾部制作的rpm包、my.cnf模板和數(shù)據(jù)目錄模板放到一個(gè)固定的地方,本例中是放在企業(yè)內(nèi)部的ftp上。

MySQL自動(dòng)化安裝部署腳本(命名為: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編譯參數(shù))

CMAKE_BUILD_TYPE

編譯的版本類型:RelWithDebInfo和Debug,不同之處是RelWithDebInfo會(huì)進(jìn)行優(yōu)化。

CMAKE_INSTALL_PREFIX

指定make  install安裝的目標(biāo)路徑。

SYSCONFDIR

指定配置文件的默認(rèn)路徑。

MYSQL_DATADIR

指定data目錄的默認(rèn)路徑。

WITH_DEBUG

指定是否有debugging信息,一般用于源碼調(diào)試時(shí),打開(kāi)WITH_DEBUG,生產(chǎn)環(huán)境關(guān)閉。

ENABLED_PROFILING

指定是否可以使用show  profile顯示操作執(zhí)行的詳細(xì)信息。

DEFAULT_CHARSET

指定默認(rèn)字符集,可以在啟動(dòng)的配置文件中指定。

DEFAULT_COLLATION

指定默認(rèn)字符比較、排序的規(guī)則。

WITH_EXTRA_CHARSETS

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

WITH_SSL

指定SSL的類型,從5.6.6開(kāi)始默認(rèn)bundled類型,此外也可以指定SSL庫(kù)的路徑地址。

WITH_ZLIB

指定zlib的類型,用于壓縮功能。

WITH_storage_STORAGE_ENGINE

指定編譯支持的存儲(chǔ)引擎,默認(rèn)支持MyISAM,MERGE,MEMORY,CSV存儲(chǔ)引擎。

ENABLED_LOCAL_INFILE

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

WITH_EMBEDDED_SERVER

指定是否編譯libmysqld嵌入式庫(kù)。

INSTALL_LAYOUT

指定安裝的布局類型。

感謝各位的閱讀!關(guān)于“MySQL如何自動(dòng)化安裝部署”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI