最近因爲業務須要,考慮使用json
類型,據瞭解 mysql
在版本5.7中能夠支持 json
類型的數據支持,但同時目前開發環境中使用的是 mysql
5.6版本,上面還有不少項目的數據庫在上面,同時也沒有多餘的服務器可供使用,故不能直接卸載將 mysql
直接升級版本。
從而想到在同一臺機器上安裝多個版本的 mysql
來解決問題。mysql
上面說到以前環境已經裝有mysql
5.6版本,基本配置以下:linux
datadir=/home/mysql/data basedir=/usr/local/mysql
同時配置文件 my.cnf
放在在 /etc/
目錄下。
此版本是經過 yum
的方式來下載安裝的,故5.7的版本不能再使用這種方式安裝,以避免數據被覆蓋。sql
個人系統版本是centos 64位,故在官網下載 5.7 64版本的安裝包。(https://downloads.mysql.com/archives/get/file/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz)
具體操做以下:數據庫
mkdir /usr/local/app cd /usr/local/app wget -o https://downloads.mysql.com/archives/get/file/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz tar -xzf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.24-linux-glibc2.12-x86_64 mysql-5.7.24 mv mysql-5.7.24 ../ cd ../mysql-5.7.24
此時已將 mysql
5.7 解壓出來。這個版本的 mysql
已經不包含模板配置文件。此時初始化數據庫(先受權,因爲以前已經建立了mysql:mysql的用戶組及用戶了,但尚未5.7版本目錄和數據的權限):json
mkdir /home/mysql-5.7.24/data chown mysql:mysql -R /home/mysql-5.7.24/data /usr/local/mysql-5.7.24 ./bin/mysqld --initialize --user=mysql --datadir=/home/mysql-5.7.24/data --basedir=/usr/local/mysql-5.7.24
此時會生成默認的 root
密碼,記下來。
而後再使用 mysqld_multi
來管理多實例。本來我是想直接使用support-files
目錄下mysql_server
來啓動的,可是發現個問題,就是該腳本老是使用 /etc/my.cnf
做爲配置文件來啓動的,因而我查了下資料,發現mysql
讀寫配置順序以下:centos
/etc/my.cnf > /etc/mysql/my.cnf > /usr/etc/my.cnf > ~/.my.cnf
因爲該配置文件已被 5.6 版本的 mysql
使用,故尋找其餘方法。服務器
使用 mysqld_multi
來管理。
修改 /etc/my.cnf
:app
#[client] #port = 3306 #socket = /usr/local/mysql/mysql.sock [mysqld_multi] mysqld = /usr/local/mysql-5.7.24/bin/mysqld_safe log = /var/log/mysqld_multi.log [mysqld3306] user=mysql server_id=206 port = 3306 basedir = /usr/local/mysql datadir = /home/mysql/data tmpdir = /home/mysql/temp socket = /usr/local/mysql/mysql.sock log-error = /home/mysql/logs/mysql_error.log pid-file = /home/mysql/mysql.pid slow-query-log-file = /home/mysql/logs/mysql-slow.log [mysqld3307] user=mysql server_id=207 port = 3307 basedir = /usr/local/mysql-5.7.24 datadir = /home/mysql-5.7.24/data tmpdir = /home/mysql-5.7.24/temp socket = /usr/local/mysql-5.7.24/mysql.sock log-error = /home/mysql-5.7.24/logs/mysql_error.log pid-file = /home/mysql-5.7.24/mysql.pid slow-query-log-file = /home/mysql-5.7.24/logs/mysql-slow.log [mysqld] #server_id=206 #binlog-do-db=testdb binlog-ignore-db=mysql log-bin=edu-mysql-slave1-bin binlog_cache_size = 1M binlog_format=mixed expire_logs_days=7 slave_skip_errors=1062 relay_log=edu-mysql-relay-bin log_slave_updates=1 read_only=0 character-set-server = utf8 collation-server = utf8_general_ci skip-external-locking skip-name-resolve #user = mysql #port = 3306 #basedir = /usr/local/mysql #datadir = /home/mysql/data #tmpdir = /home/mysql/temp # server_id = ..... #socket = /usr/local/mysql/mysql.sock #log-error = /home/mysql/logs/mysql_error.log #pid-file = /home/mysql/mysql.pid open_files_limit = 10240 back_log = 600 max_connections=500 max_connect_errors = 6000 wait_timeout=605800 #open_tables = 600 #table_cache = 650 #opened_tables = 630 max_allowed_packet = 32M sort_buffer_size = 4M join_buffer_size = 4M thread_cache_size = 300 query_cache_type = 1 query_cache_size = 256M query_cache_limit = 2M query_cache_min_res_unit = 16k tmp_table_size = 256M max_heap_table_size = 256M key_buffer_size = 256M read_buffer_size = 1M read_rnd_buffer_size = 16M bulk_insert_buffer_size = 64M lower_case_table_names=1 default-storage-engine = INNODB innodb_buffer_pool_size = 2G innodb_log_buffer_size = 32M innodb_log_file_size = 128M innodb_flush_method = O_DIRECT ##################### #thread_concurrency = 32 long_query_time= 2 slow-query-log = on #slow-query-log-file = /home/mysql/logs/mysql-slow.log [mysqld-5.7] innodb_buffer_pool_dump_pct = 40 innodb_page_cleaners = 4 innodb_undo_log_truncate = 1 innodb_max_undo_log_size = 1G innodb_purge_rseg_truncate_frequency = 128 binlog_gtid_simple_recovery=1 log_timestamps=system transaction_write_set_extraction=MURMUR32 show_compatibility_56=on [mysqldump] quick max_allowed_packet = 32M [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
上面多餘的配置根據需求能夠去掉,保留關鍵的配置便可,主要是端口,pid,和文件路徑這些要不同。
修改完成後,可使用 support_files
目錄下的 mysqld_multi.server
來管理多個版本實例了。
./mysqld_multi.server
有 start
,stop
,report
幾個操做,顧名思義,使用就行了,report
就是相似 status
的意思。socket
./mysqld_multi.server report
發現
Reporting MySQL servers MySQL server from group: mysqld3306 is running MySQL server from group: mysqld3307 is not running
而後啓動3307便可,
./mysqld_multi.server start 3307
Reporting MySQL servers MySQL server from group: mysqld3306 is running MySQL server from group: mysqld3307 is running
不指定某個具體的實例就是啓動或者關閉全部的。優化
這樣就搞定了,但在終端使用客戶端的時候要注意要具體指定某一個sock文件和端口:
mysql -S /usr/local/mysql-5.7.24/mysql.sock -P 3307 -u root -p
最後,能夠將 mysqld_multi
做爲系統服務:
cp /usr/local/mysql-5.7.24/support-files/mysqld_multi.server /etc/rc.d/init.d/mysqld_multi chkconfig --add /mysqld_multi
就能夠直接使用了:
mysqld_multi report
使用 bin/mysqld_safe
指定配置文件來啓動:
cp /etc/my.cnf ./ ##改改其中的一些配置(端口,pid,和文件路徑) ./bin/mysqld_safe –defaults-file=/usr/local/mysql-5.7.24/my.cnf –basedir=/usr/local/mysql-5.7.24 –datadir=/home/mysql-5.7.24/data &
文章有些雜亂,有時間再優化。