您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關MySQL的多實例介紹及配置是怎樣的,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
1.什么是MySQL多實例
簡單來說,MySQL多實例就是在一臺服務器上同時開啟多個不同服務端口,同時運行多個MySQL服務進程,這些服務進程通過不同的socket監聽不同的服務器端口來提供服務。這些MySQL多實例共用一套MySQL安裝程序,使用不同的my.cnf(也可以相同)配置文件,啟動程序 (也可以相同)和數據文件。在提供服務時,多實例MySQL在邏輯上看起來是各自獨立的,它根據配置文件的對應設定值,獲得服務器相應數量的硬件資源。
多實例的好處在于它能有效利用服務器的資源,節約服務器資源,弊端會存在資源的相互搶占的問題。當某個數據庫實例并發很高或有SQL慢查詢時,整個實例會消耗大量的系統CPU、磁盤I/O等資源,導致服務器上的其他數據庫實例提供服務的質量一起下降。不同實例獲取的資源是相對獨立的,無法像虛擬化一樣完全隔離。
2.配置MySQL多實例
MySQL的多實例配置可以是單一文件、單一啟動程序的部署方案,但是不推薦,風險太高了。這里部署的是多配置文件,多啟動的部署方案。在前面,我們已經搭建了MySQL的服務,也就是存在了一個默認的實例,端口為3306。在這里,我們多增加一個實例,端口為3307.
(1)創建多實例的數據文件目錄,目錄自己確定就行
mkdir -p /data/3307/data
(2)創建MySQL多實例的配置文件,vim /data/3307/my.cnf,內容如下
[client] port = 3307 socket = /data/3307/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3307 socket = /data/3307/mysql.sock basedir = /usr/local/mysql datadir = /data/3307/data open_files_limit = 1024 read-only back_log = 600 max_connections = 800 max_connect_errors = 3000 #table_cache = 614 external-locking = FALSE max_allowed_packet = 8M sort_buffer_size = 1M join_buffer_size = 1M thread_cache_size = 100 thread_concurrency = 2 query_cache_size = 2M query_cache_limit = 1M query_cache_min_res_unit = 2K #default_table_type = InnoDB thread_stack = 192K #transaction_isolation = READ-COMMITTED tmp_table_size = 2M max_heap_table_size = 2M long_query_time =1 pid-file = /data/3307/mysql.pid relay-log = /data/3307/relay-bin relay-log-info-file = /data/3307/relay-log.info binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M key_buffer_size = 16M read_rnd_buffer_size = 1M bulk_insert_buffer_size = 1M lower_case_table_names = 1 skip-name-resolve slave-skip-errors = 1032,1062 replicate-ignore-db=mysql server-id = 3 #不同實例的server-id不一樣的,3306端口的server_id我設置為52了,這里不能是52 #innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 32M innodb_data_file_path = ibdata1:128M:autoextend innodb_file_io_threads = 4 #innodb_threads_concurrency = 8 innodb_flush_log_at_trx_commit = 2 innodb_log_buffer_size = 2M innodb_log_file_size = 4M innodb_log_files_in_group = 3 innodb_max_dirty_pages_pct = 90 innodb_lock_wait_timeout = 120 innodb_file_per_table = 0 [mysqldump] quick max_allowed_packet = 2M [mysql_safe] log-error=/data/3307/mysql_pcm3307.err pid-file=/data/3307/mysqld.pid
(3)創建MySQL多實例的啟動文件,vim /data/3307/mysql ,內容如下
#!/bin/bash #init port=3307 mysql_user="root" mysql_pwd="pcm123456" CmdPath="/usr/local/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function function_start_mysql(){ if [ ! -e "$mysql_sock" ];then printf "Starting Mysql...\n" /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 >/dev/null & #啟動命令 else printf "Mysql is running...\n" exit fi } #stop function function_stop_mysql(){ if [ ! -e "$mysql_sock" ];then printf "Mysql is stopped...\n" exit else printf "Stoping Mysql...\n" ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown #停止命令 fi } #restart function function_restart_mysql(){ printf "Restart Mysql...\n" function_stop_mysql sleep 2 function_start_mysql } case $1 in start) function_start_mysql ;; stop) function_stop_mysql ;; restart) function_restart_mysql ;; *) printf "Usage:/data/${port}/mysql.sh {start|stop|restart}\n" esac
(4)配置MySQL多實例的文件權限
chown -R mysql:mysql /data/ find /data -name mysql.sh |xargs chmod 700 #修改權限為700,因為里面有數據庫的密碼,要求較高的安全性
(5)初始化MySQL多實例的數據庫文件
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/3307/data/ --user=mysql
查看3307目錄下data目錄,可以看到多出了不少的數據文件
(6)啟動MySQL多實例數據庫,檢查看到3307的端口已經啟動
/data/3307/mysql.sh start
PS:一開始我的啟動是失敗了的,后來把data目錄下的ibdata1,ib_logfile0,ib_logfile0這三個文件刪除之后才正常啟動。應該是因為我之前搭建MySQL服務的時候初始化了一次,再次這樣初始化生成的文件和后來的配置不符合。
3.登陸管理MySQL多實例數據庫
(1)登陸MySQL數據庫
mysql -S /data/3307/mysql.sock #需要指定sock文件,不然使用默認的3306
(2)上面看到MySQL的root的密碼還是空的,我們需要修改。
mysqladmin -u root password 'pcm123456' -S /data/3307/mysql.sock
關于MySQL的多實例介紹及配置是怎樣的就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。