centos6.x安装mysql5.6及启动多实例
mysql? 啟動多實例?? 轉:https://www.cnblogs.com/yanxinjiang/p/7778029.html
?
linux運維、架構之路-MySQL多實例
一、MySQL多實例介紹
? ? ? ? ? ?一臺服務器上開啟多個不同的服務端口(3306,33307,3308),運行多個MySQL服務進程,共用一套MySQL安裝程序,多實例MySQL在邏輯上看是各自獨立的
1、多實例主從復制原理圖
2、優點
①有效利用服務器資源
②節約服務器資源
③資源互相搶占問題,其中一個實例并發很高或者慢查詢,其它實例也受影響
3、應用場景
①公司資金緊缺
②并發訪問不是特別大的業務
③門戶網站應用MySQL多實例場景,一般是從庫
4、MySQL多實例常見配置方案
①多配置文件、多啟動程序的方案(常用)
②單一配置文件、單一啟動程序多實例方案(一個配置文件,不好管理,耦合度太高,)
二、MySQL多實例部署
1、環境
[root@MySQL ~]# cat /etc/redhat-release CentOS release 6.9 (Final) [root@MySQL ~]# uname -r 2.6.32-696.el6.x86_64 [root@MySQL ~]# hostname -I 172.19.5.54 172.16.1.542、安裝MySQL
useradd -s /sbin/nologin -M mysql cd /server/tools tar xf mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz mv mysql-5.6.36-linux-glibc2.5-x86_64 /application/mysql-5.6.36 ln -s /application/mysql-5.6.36/ /application/mysql chown -R mysql.mysql /application/mysql3、配置多實例啟動命令和配置文件目錄
mkdir -p /data/{3306,3307}/data4、unzip data.zip 在/下直接解壓覆蓋/data目錄(注:data.zip是打包好的多實例配置文件、數據、啟動命令)
| 1 2 3 4 5 6 7 8 9 10 | [root@MySQL data]# tree . ├── 3306 │??? ├── data???????? #3306實例數據文件目錄 │??? ├── my.cnf?????? #3306實例配置文件 │??? └── mysql??????? #3306實例啟動命令 └── 3307 ????├── data????????? #3307實例數據文件目錄 ????├── my.cnf??????? #3307實例配置文件 ????└── mysql???????? #3307實例啟動命令 |
5、授權mysql用戶管理/data目錄
chown -R mysql.mysql /data6、授權mysql命令執行權限
find /data -type f -name "mysql"|xargs chmod +x7、配置mysql命令啟動環境變量
方法一:ln -s /application/mysql/bin/* /usr/local/sbin/ 方法二: echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile source /etc/profile
8、初始化多實例數據庫
cd /application/mysql/scripts/ ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data/ --user=mysql #初始化數據庫3306 ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data/ --user=mysql #初始化數據庫33079、MySQL多實例服務啟動
#啟動服務 /data/3306/mysql start /data/3307/mysql start [root@MySQL data]# netstat -lntup|grep 330 tcp 0 0 :::3306 :::* LISTEN 3848/mysqld tcp 0 0 :::3307 :::* LISTEN 4885/mysqld10、MySQL多實例設置密碼及登錄
#設置密碼: mysqladmin -uroot password 123456 -S /data/3306/mysql.sock mysqladmin -uroot password 123456 -S /data/3307/mysql.sock #登錄數據庫,指定sock mysql -uroot -p123456 -S /data/3306/mysql.sock mysql -uroot -p123456 -S /data/3307/mysql.sock三、MySQL多實例配置文件
| ?/data/3306/my.cnf [client] port??????????? =?3306 socket????????? = /data/3306/mysql.sock [mysqld] port??????????? = 3306 socket????????? = /data/3306/mysql.sock datadir???????? = /data/3306/data ? open_files_limit??? = 1024 back_log = 600 max_connections = 800 max_connect_errors = 3000 table_open_cache = 512 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 thread_stack = 192K tmp_table_size = 2M max_heap_table_size = 2M long_query_time = 1 pid-file = /data/3306/mysql.pid log-bin = /data/3306/mysql-bin relay-log = /data/3306/relay-bin relay-log-info-file = /data/3306/relay-log.info binlog_cache_size = 1M max_binlog_cache_size = 1M max_binlog_size = 2M expire_logs_days = 7 key_buffer_size = 16M read_buffer_size = 1M 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 = 4 | /data/3307/my.cnf [client] port??????????? =?3307 socket????????? = /data/3307/mysql.sock [mysqld] port??????????? = 3307 socket??????? ??= /data/3307/mysql.sock datadir???????? = /data/3307/data ? open_files_limit??? = 1024 back_log = 600 max_connections = 800 max_connect_errors = 3000 table_open_cache = 512 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 thread_stack = 192K 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 expire_logs_days = 7 key_buffer_size = 16M read_buffer_size = 1M 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 = 5 |
? ? ? ??說明:對比兩個配置文件之后,可以發現除了端口、server-id不一樣,3306開啟了log-bin功能,這樣可以做MySQL主復制
四、MySQL多實例啟動命令腳本
#!/bin/sh #init port=3306 mysql_user="root" mysql_pwd="123456" CmdPath="/application/mysql/bin" mysql_sock="/data/${port}/mysql.sock" #startup function function_start_mysql() {if [ ! -e "$mysql_sock" ];thenprintf "Starting MySQL...\n"/bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null &elseprintf "MySQL is running...\n"exitfi }#stop function function_stop_mysql() {if [ ! -e "$mysql_sock" ];thenprintf "MySQL is stopped...\n"exitelseprintf "Stoping MySQL...\n"${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdownfi }#restart function function_restart_mysql() {printf "Restarting MySQL...\n"function_stop_mysqlsleep 2function_start_mysql }case $1 in start)function_start_mysql ;; stop)function_stop_mysql ;; restart)function_restart_mysql ;; *)printf "Usage: /data/${port}/mysql {start|stop|restart}\n" esac五、遇到的錯誤
1、[ERROR] Plugin 'InnoDB' init function returned error
? ? ? ?刪除MySQL目錄下的ib_logfile0和ib_logfile1兩個文件,就可以解決問題了
2、5.5.32——>5.6.36配置參數不對導致多實例無法啟動
? ? ? table_cache——>table_open_cache = 512(5.6改名了)
六、生產環境多實例配置環境
1、一般在1-4個實例之間居多,1-2個最多,大業務占用的機器比較多,機器R510居多,CPU是E5210,48G內存,硬盤12*300G SAS,RAID10
2、內存32G,雙cpu8核,硬盤6X600G,跑2-3個實例
成功最有效的方法就是向有經驗的人學習!?
?
?
yum -y install gcc gcc-c++ ncurses-devel cmake
ss -tancd /usr/local/srcwget http://dev.mysql.com/get/Downloads/MySQL-5.6/mysql-5.6.30.tar.gztar -xf mysql-5.6.30.tar.gzcd mysql-5.6.30groupadd mysqluseradd -r -g mysql mysql mkdir -p /usr/local/mysql #新建mysql安裝目錄 mkdir -p /data/mysqldb #新建mysql數據庫數據文件目錄 1 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/data/mysqldb -DMYSQL_TCP_PORT=3306 -DENABLE_DOWNLOADS=1 -DEXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DWITH_READLINE=1 (注:重新運行配置,需要執行make clean并刪除CMakeCache.txt文件 rm CMakeCache.txt ) make && make installls /usr/local/mysql ?|| mkdir??/usr/local/mysql
cd /usr/local/mysql ; chown -R mysql:mysql ?.?
ls ?/data/mysqldb? || mkdir ?/data/mysqldb
cd /data/mysqldb; chown -R mysql:mysql .
cd /usr/local/mysql?
./scripts/mysql_install_db ?--user=mysql--datadir=/data/mysqldb
ls /usr/local/mysql/support-files/my-default.cnf
cp -p /usr/local/mysql/support-files/my-default.cnf ? /etc/my.cnf
cp -p ??/usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld start?
chkconfig --level 35 mysqld on
echo 'export PATH=/usr/local/mysql/bin:$PATH' ? >> /etc/profile
source??/etc/profile
?如果直接啟動沒有在配置文件里面指定mysql的安裝目錄跟端口數據庫目錄在哪里的話會報錯,所以做好了這個的話直接將下面的這些文字貼進來,這也是優化過的參數還要檢查my.cnf這個文件的socket的指定路徑的權限
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
[mysql]
#這個配置段設置啟動MySQL服務的條件;在這種情況下,no-auto-rehash確保這個服務啟動得比較快。
no-auto-rehash
[mysqld]
user = mysql
port = 3306
#skip-grant-tables
socket = /var/lib/mysql/mysql.sock
basedir = /usr/local/mysql
#basedir = /usr/local/mysql
datadir = /data/mysqldb
#datadir = /data/mysql/data/
open_files_limit = 10240
back_log = 600
#在MYSQL暫時停止響應新請求之前,短時間內的多少個請求可以被存在堆棧中。如果系統在短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的監聽隊列的大小。默認值80。
log-bin = mysql-bin #這些路徑相對于datadir
log-bin-index = mysql-bin.index
relay-log = relay-log
relay_log_index = relay-log.index
max_connections = 3000
#MySQL允許最大的進程連接數,如果經常出現Too Many Connections的錯誤提示,則需要增大此值。默認151
binlog_format=ROW ? ? ? ?#有三種格式 ?詳情請參考 ?http://blog.csdn.net/wsyw126/article/details/73011497
max_connect_errors = 6000
#設置每個主機的連接請求異常中斷的最大次數,當超過該次數,MYSQL服務器將禁止host的連接請求,直到mysql服務器重啟或通過flush hosts命令清空此host的相關信息。默認100
external-locking = FALSE
#使用–skip-external-locking MySQL選項以避免外部鎖定。該選項默認開啟
max_allowed_packet = 32M
#設置在網絡傳輸中一次消息傳輸量的最大值。系統默認值 為4MB,最大值是1GB,必須設置1024的倍數。
#sort_buffer_size = 2M
# Sort_Buffer_Size 是一個connection級參數,在每個connection(session)第一次需要使用這個buffer的時候,一次性分配設置的內存。
#Sort_Buffer_Size 并不是越大越好,由于是connection級的參數,過大的設置+高并發可能會耗盡系統內存資源。例如:500個連接將會消耗 500*sort_buffer_size(8M)=4G內存
#Sort_Buffer_Size 超過2KB的時候,就會使用mmap() 而不是 malloc() 來進行內存分配,導致效率降低。 系統默認2M,使用默認值即可
#join_buffer_size = 2M
#用于表間關聯緩存的大小,和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享。系統默認2M,使用默認值即可
thread_cache_size = 300
#默認38
# 服務器線程緩存這個值表示可以重新利用保存在緩存中線程的數量,當斷開連接時如果緩存中還有空間,那么客戶端的線程將被放到緩存中,如果線程重新被請求,那么請求將從緩存中讀取,如果緩存中是空的或者是新的請求,那么這個線程將被重新創建,如果有很多新的線程,增加這個值可以改善系統性能.通過比較 Connections 和 Threads_created 狀態的變量,可以看到這個變量的作用。設置規則如下:1GB 內存配置為8,2GB配置為16,3GB配置為32,4GB或更高內存,可配置更大。
#thread_concurrency = 8
#系統默認為10,使用10先觀察
# 設置thread_concurrency的值的正確與否, 對mysql的性能影響很大, 在多個cpu(或多核)的情況下,錯誤設置了thread_concurrency的值, 會導致mysql不能充分利用多cpu(或多核), 出現同一時刻只能一個cpu(或核)在工作的情況。thread_concurrency應設為CPU核數的2倍. 比如有一個雙核的CPU, 那么thread_concurrency的應該為4; 2個雙核的cpu, thread_concurrency的值應為8
query_cache_size = 64M
#在MyISAM引擎優化中,這個參數也是一個重要的優化參數。但也爆露出來一些問題。機器的內存越來越大,習慣性把參數分配的值越來越大。這個參數加大后也引發了一系列問題。我們首先分析一下 query_cache_size的工作原理:一個SELECT查詢在DB中工作后,DB會把該語句緩存下來,當同樣的一個SQL再次來到DB里調用時,DB在該表沒發生變化的情況下把結果從緩存中返回給Client。這里有一個關建點,就是DB在利用Query_cache工作時,要求該語句涉及的表在這段時間內沒有發生變更。那如果該表在發生變更時,Query_cache里的數據又怎么處理呢?首先要把Query_cache和該表相關的語句全部置為失效,然后在寫入更新。那么如果Query_cache非常大,該表的查詢結構又比較多,查詢語句失效也慢,一個更新或是Insert就會很慢,這樣看到的就是Update或是Insert怎么這么慢了。所以在數據庫寫入量或是更新量也比較大的系統,該參數不適合分配過大。而且在高并發,寫入量大的系統,建議把該功能禁掉。
query_cache_limit = 4M
#指定單個查詢能夠使用的緩沖區大小,缺省為1M
query_cache_min_res_unit = 2k
#默認是4KB,設置值大對大數據查詢有好處,但如果你的查詢都是小數據查詢,就容易造成內存碎片和浪費
#查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
#如果查詢緩存碎片率超過20%,可以用FLUSH QUERY CACHE整理緩存碎片,或者試試減小query_cache_min_res_unit,如果你的查詢都是小數據量的話。
#查詢緩存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%
#查詢緩存利用率在25%以下的話說明query_cache_size設置的過大,可適當減小;查詢緩存利用率在80%以上而且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小,要不就是碎片太多。
#查詢緩存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%
#default-storage-engine = MyISAM
#default_table_type = InnoDB #開啟失敗
#thread_stack = 192K
#設置MYSQL每個線程的堆棧大小,默認值足夠大,可滿足普通操作。可設置范圍為128K至4GB,默認為256KB,使用默認觀察
transaction_isolation = READ-COMMITTED
# 設定默認的事務隔離級別.可用的級別如下:READ UNCOMMITTED-讀未提交 READ COMMITTE-讀已提交 REPEATABLE READ -可重復讀 SERIALIZABLE -串行
tmp_table_size = 256M
# tmp_table_size 的默認大小是 32M。如果一張臨時表超出該大小,MySQL產生一個 The table tbl_name is full 形式的錯誤,如果你做很多高級 GROUP BY 查詢,增加 tmp_table_size 值。如果超過該值,則會將臨時表寫入磁盤。
max_heap_table_size = 256M
expire_logs_days = 7
key_buffer_size = 2048M
#批定用于索引的緩沖區大小,增加它可以得到更好的索引處理性能,對于內存在4GB左右的服務器來說,該參數可設置為256MB或384MB。
read_buffer_size = 1M
#默認128K
# MySql讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySql會為它分配一段內存緩沖區。read_buffer_size變量控制這一緩沖區的大小。如果對表的順序掃描請求非常頻繁,并且你認為頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩沖區大小提高其性能。和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享。
read_rnd_buffer_size = 16M
# MySql的隨機讀(查詢操作)緩沖區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,MySql會首先掃描一遍該緩沖,以避免磁盤搜索,提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySql會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大。
bulk_insert_buffer_size = 64M
#批量插入數據緩存大小,可以有效提高插入效率,默認為8M
myisam_sort_buffer_size = 128M
# MyISAM表發生變化時重新排序所需的緩沖 默認8M
myisam_max_sort_file_size = 10G
# MySQL重建索引時所允許的最大臨時文件的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 如果文件大小比此值更大,索引會通過鍵值緩沖創建(更慢)
#myisam_max_extra_sort_file_size = 10G 5.6無此值設置
#myisam_repair_threads = 1 默認為1
# 如果一個表擁有超過一個索引, MyISAM 可以通過并行排序使用超過一個線程去修復他們.
# 這對于擁有多個CPU以及大量內存情況的用戶,是一個很好的選擇.
myisam_recover
#自動檢查和修復沒有適當關閉的 MyISAM 表
skip-name-resolve
lower_case_table_names = 1
server-id = 1
innodb_additional_mem_pool_size = 16M
#這個參數用來設置 InnoDB 存儲的數據目錄信息和其它內部數據結構的內存池大小,類似于Oracle的library cache。這不是一個強制參數,可以被突破。
innodb_buffer_pool_size = 2048M
# 這對Innodb表來說非常重要。Innodb相比MyISAM表對緩沖更為敏感。MyISAM可以在默認的 key_buffer_size 設置下運行的可以,然而Innodb在默認的 innodb_buffer_pool_size 設置下卻跟蝸牛似的。由于Innodb把數據和索引都緩存起來,無需留給操作系統太多的內存,因此如果只需要用Innodb的話則可以設置它高達 70-80% 的可用內存。一些應用于 key_buffer 的規則有 — 如果你的數據量不大,并且不會暴增,那么無需把 innodb_buffer_pool_size 設置的太大了
#innodb_data_file_path = ibdata1:1024M:autoextend 設置過大導致報錯,默認12M觀察
#表空間文件 重要數據
#innodb_file_io_threads = 4 不明確,使用默認值
#文件IO的線程數,一般為 4,但是在 Windows 下,可以設置得較大。
innodb_thread_concurrency = 8
#服務器有幾個CPU就設置為幾,建議用默認設置,一般為8.
innodb_flush_log_at_trx_commit = 2
# 如果將此參數設置為1,將在每次提交事務后將日志寫入磁盤。為提供性能,可以設置為0或2,但要承擔在發生故障時丟失數據的風險。設置為0表示事務日志寫入日志文件,而日志文件每秒刷新到磁盤一次。設置為2表示事務日志將在提交時寫入日志,但日志文件每次刷新到磁盤一次。
#innodb_log_buffer_size = 16M 使用默認8M
#此參數確定些日志文件所用的內存大小,以M為單位。緩沖區更大能提高性能,但意外的故障將會丟失數據.MySQL開發人員建議設置為1-8M之間
#innodb_log_file_size = 128M 使用默認48M
#此參數確定數據日志文件的大小,以M為單位,更大的設置可以提高性能,但也會增加恢復故障數據庫所需的時間
#innodb_log_files_in_group = 3 使用默認2
#為提高性能,MySQL可以以循環方式將日志文件寫到多個文件。推薦設置為3M
#innodb_max_dirty_pages_pct = 90 使用默認75觀察
#推薦閱讀 http://www.taobaodba.com/html/221_innodb_max_dirty_pages_pct_checkpoint.html
# Buffer_Pool中Dirty_Page所占的數量,直接影響InnoDB的關閉時間。參數innodb_max_dirty_pages_pct 可以直接控制了Dirty_Page在Buffer_Pool中所占的比率,而且幸運的是innodb_max_dirty_pages_pct是可以動態改變的。所以,在關閉InnoDB之前先將innodb_max_dirty_pages_pct調小,強制數據塊Flush一段時間,則能夠大大縮短 MySQL關閉的時間。
innodb_lock_wait_timeout = 120
#默認為50秒
# InnoDB 有其內置的死鎖檢測機制,能導致未完成的事務回滾。但是,如果結合InnoDB使用MyISAM的lock tables 語句或第三方事務引擎,則InnoDB無法識別死鎖。為消除這種可能性,可以將innodb_lock_wait_timeout設置為一個整數值,指示 MySQL在允許其他事務修改那些最終受事務回滾的數據之前要等待多長時間(秒數)
innodb_file_per_table = 0
#默認為No
#獨享表空間(關閉)
[mysqldump]
quick
# max_allowed_packet = 32M
[mysqld_safe]
#log-error=/data/mysql/mysql_oldboy.err
#pid-file=/data/mysql/mysqld.pid
log-error=/usr/local/mysql/data/mysql_oldboy.err
pid-file=/usr/local/mysql/data/mysqld.pid
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
??
轉載于:https://www.cnblogs.com/fyy-hhzzj/p/8606822.html
總結
以上是生活随笔為你收集整理的centos6.x安装mysql5.6及启动多实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GVIM工具之gvim的配色方式
- 下一篇: Java VS .NET:Java与.N