MySQL有三個(gè)版本:二進(jìn)制,源碼包,RPM。
下面講講二進(jìn)制包的安裝過(guò)程
下載地址:http://dev.mysql.com/downloads/mysql/
選擇Linux-Generic
我這里選擇的是mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz
解壓后,里面有個(gè)文件INSTALL-BINARY,其實(shí)給出了二進(jìn)制包的部署過(guò)程
shell> groupadd mysqlshell> useradd -r -g mysql -s /bin/false mysqlshell> cd /usr/localshell> tar zxvf /path/to/mysql-VERSION-OS.tar.gzshell> ln -s full-path-to-mysql-VERSION-OS mysqlshell> cd mysqlshell> chown -R mysql .shell> chgrp -R mysql .shell> scripts/mysql_install_db --user=mysqlshell> chown -R root .shell> chown -R mysql datashell> bin/mysqld_safe --user=mysql &# Next command is optionalshell> cp support-files/mysql.server /etc/init.d/mysql.server
相對(duì)于實(shí)際生產(chǎn)環(huán)境的部署,上面在初始化數(shù)據(jù)庫(kù)的過(guò)程中少了一步-即指定配置文件,如果配置文件確認(rèn)了,數(shù)據(jù)目錄,日志目錄都確認(rèn)了,MySQL二進(jìn)制版本的部署還是相當(dāng)容易的一件事情。
下面寫(xiě)了一個(gè)腳本,基于后面提供的配置文件,執(zhí)行格式如下:
sh 4.sh /root/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz /mysql3306 3306
其中 4.sh是腳本,/root/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz是二進(jìn)制包的絕對(duì)路徑,/mysql3306是basedir,3306是需設(shè)置的端口,
利用該腳本,只需要預(yù)先定義好配置文件,就可進(jìn)行MySQL數(shù)據(jù)庫(kù)的快速部署以及一臺(tái)服務(wù)器上多個(gè)實(shí)例的部署。
#!/bin/bash#需傳入三個(gè)參數(shù),第一個(gè)是mysql二進(jìn)制壓縮包的路徑(絕對(duì)路徑),譬如/root/mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz,#第二個(gè)是mysql的basedir,即需要?jiǎng)?chuàng)建在哪個(gè)目錄下,第三個(gè)是設(shè)置的端口號(hào)filename=$1basedir=$2port=$3groupadd mysqluseradd -r -g mysql -s /bin/false mysqlcd /usr/localtar zxvf $filename#file是獲取mysql二進(jìn)制包的名稱(chēng),譬如mysql-5.6.28-linux-glibc2.5-x86_64.tar.gz#dir是mysql壓縮包的路徑,不含包名本身,譬如/root,因?yàn)楹罄m(xù)的配置文件my.cnf也是放到這個(gè)路徑下file=`basename $filename`dir=`dirname $filename`#獲取解壓后的名字,即mysql-5.6.28-linux-glibc2.5-x86_64after_tar_file=${file:0:-7}#將二進(jìn)制包改名為 mysql+端口號(hào),這樣也便于后續(xù)的區(qū)分mv $after_tar_file mysql"$port"cd mysql"$port"#將原始的配置文件(需和mysql壓縮包放到同層目錄下,在本例中是/root/my.cnf)copy到解壓并改名后的mysql二進(jìn)制目錄下,修改為my+端口號(hào).cnfcp $dir/my.cnf ./my"$port".cnfuser_cnf=my"$port".cnf#下面主要是將原始配置文件中的路徑修改為自己設(shè)定的路徑,即傳入的第二個(gè)參數(shù)#整個(gè)的挑戰(zhàn)在于傳入的路徑帶有"/",在sed替換時(shí)會(huì)有問(wèn)題,所有用了一個(gè)取巧的思路,即先將"/"替換為"|",進(jìn)行sed替換,然后再將文件中的"|"修改回"/"basedir_new=${basedir////|}sed -i "s///project//class2/$basedir_new/g" $user_cnfsed -i "s/|////g" $user_cnf#設(shè)置server_id,取當(dāng)前的秒值server_id=`date +%s`sed -i /^server_id/s/.*/server_id="$server_id"/ $user_cnf#設(shè)置端口號(hào)sed -i /^port/s/.*/port="$port"/ $user_cnf#創(chuàng)建必要的目錄并修改權(quán)限mkdir -p "$basedir"/mysql/{run,data,share,log,tmp}chown -R mysql $basedirchgrp -R mysql $basedir#下面這個(gè)是非必要的,具體看后面的總結(jié)cp share/english/errmsg.sys "$basedir"/mysql/share/#初始化時(shí)--force也是非必要的,具體可見(jiàn)后面的總結(jié)scripts/mysql_install_db --user=mysql --defaults-file="$user_cnf" --forcebin/mysqld_safe --defaults-file="$user_cnf" --user=mysql &
下面給出了配置文件的一個(gè)參考,大家可根據(jù)實(shí)際情況進(jìn)行相應(yīng)的修改
[mysqld_safe]pid-file=/project/class2/mysql/run/mysqld.pid[mysql]port=3306prompt=//u@//d //r://m://s>default-character-set=utf8no-auto-rehash[client]port=3306socket=/project/class2/mysql/run/mysql.sock[mysqld]#dirbasedir=/project/class2/mysqldatadir=/project/class2/mysql/datatmpdir=/tmplc_messages_dir=/project/class2/mysql/sharelog-error=/project/class2/mysql/log/alert.logslow_query_log_file=/project/class2/mysql/log/slow.loggeneral_log_file=/project/class2/mysql/log/general.logsocket=/project/class2/mysql/run/mysql.sock#innodbinnodb_data_home_dir=/project/class2/mysql/datainnodb_log_group_home_dir=/project/class2/mysql/datainnodb_data_file_path=ibdata1:2G;ibdata2:16M:autoextendinnodb_buffer_pool_size=10Ginnodb_buffer_pool_instances=4innodb_log_files_in_group=2innodb_log_file_size=1Ginnodb_log_buffer_size=200Minnodb_flush_log_at_trx_commit=1innodb_additional_mem_pool_size=20Minnodb_max_dirty_pages_pct=60innodb_io_capacity=1000innodb_thread_concurrency=16innodb_read_io_threads=8innodb_write_io_threads=8innodb_open_files=60000innodb_file_format=Barracudainnodb_file_per_table=1innodb_flush_method=O_DIRECTinnodb_change_buffering=insertsinnodb_adaptive_flushing=1innodb_old_blocks_time=1000innodb_stats_on_metadata=0innodb_read_ahead=0innodb_use_native_aio=0innodb_lock_wait_timeout=5innodb_rollback_on_timeout=0innodb_purge_threads=1innodb_strict_mode=1transaction-isolation=READ-COMMITTED#myisamkey_buffer=64Mmyisam_sort_buffer_size=64Mconcurrent_insert=2delayed_insert_timeout=300#replicationmaster-info-file=/project/class2/mysql/log/master.inforelay-log=/project/class2/mysql/log/relaylogrelay_log_info_file=/project/class2/mysql/log/relay-log.inforelay-log-index=/project/class2/mysql/log/mysqld-relay-bin.indexslave_load_tmpdir=/project/class2/mysql/tmpslave_type_conversions="ALL_NON_LOSSY"slave_net_timeout=4skip-slave-startsync_master_info=1000sync_relay_log_info=1000#binloglog-bin=/project/class2/mysql/log/mysql-binserver_id=2552763370binlog_cache_size=32Kmax_binlog_cache_size=2Gmax_binlog_size=500Mbinlog-format=ROWsync_binlog=1000log-slave-updates=1expire_logs_days=0#serverdefault-storage-engine=INNODBcharacter-set-server=utf8lower_case_table_names=1skip-external-lockingopen_files_limit=65536safe-user-createlocal-infile=1#sqlmod="STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE"log_slow_admin_statements=1log_warnings=1long_query_time=1slow_query_log=1general_log=0query_cache_type=0query_cache_limit=1Mquery_cache_min_res_unit=1Ktable_definition_cache=65536thread_stack=512Kthread_cache_size=256read_rnd_buffer_size=128Ksort_buffer_size=256Kjoin_buffer_size=128Kread_buffer_size=128Kport=3306skip-name-resolveskip-sslmax_connections=4500max_user_connections=4000max_connect_errors=65536max_allowed_packet=128Mconnect_timeout=8net_read_timeout=30net_write_timeout=60back_log=1024
總結(jié):
在初始化的過(guò)程中,如果報(bào)以下錯(cuò)誤:
FATAL ERROR: Neither host 'keepalived02' nor 'localhost' could be looked up with/mysql3306/mysql/bin/resolveipPlease configure the 'hostname' command to return a correcthostname.If you want to solve this at a later stage, restart this scriptwith the --force option
但是在bash終端上執(zhí)行hostname命令又確實(shí)有值返回,可加--force參數(shù),如下所示:
如果報(bào)以下錯(cuò)誤:
可將二進(jìn)制版本中share/english/errmsg.sys文件COPY到/mysql3306/mysql/share/下。
后續(xù):這兩個(gè)錯(cuò)誤的原因都是因?yàn)閎asedir修改了,它默認(rèn)是在二進(jìn)制包中查找的。
如何利用腳本實(shí)現(xiàn)MySQL的快速部署以及一機(jī)多實(shí)例的部署,通過(guò)這篇文章希望對(duì)大家學(xué)習(xí)MySQL的部署有所幫助。