centos 6.5,使用二進制安裝多實例mysql 5.5.60node
所需安裝包mysql-5.5.60-linux-glibc2.12-x86_64.tar.gz、ncurses-devel-5.7-4.20090207.el6.x86_64.rpm、libaio-devel-0.3.107-10.el6.x86_64.rpmmysql
在一臺機器上開啓多個不一樣的服務端口,運行多個mysql服務進程,這些mysql多實例共用一套mysql安裝程序,使用不一樣(也能夠相同)的my.cnf配置文件、啓動程序、數據文件,多個實例根據配置文件對應的設定值來取得對應數量的服務器相關硬件資源。多實例相似合租的各個房間,硬件資源至關於公用的廚房、衛生間和客廳linux
建立更新包目錄,並將三個安裝包上傳至該目錄下,賦予執行權限sql
[root@oldboy ~]# mkdir -p /home/oldboy/tools [root@oldboy ~]# cd /home/oldboy/tools [root@oldboy tools]# chmod +x * [root@oldboy tools]# rpm -ivh --nodeps ncurses-devel-5.7-4.20090207.el6.x86_64.rpm [root@oldboy tools]# rpm -ivh libaio-devel-0.3.107-10.el6.x86_64.rpm
建立用戶和組、解壓二進制mysql安裝包、並建立軟鏈接bootstrap
[root@oldboy tools]# groupadd mysql [root@oldboy tools]# useradd -M mysql -g mysql -s /sbin/nologin [root@oldboy tools]# tar zxf mysql-5.5.60-linux-glibc2.12-x86_64.tar.gz [root@oldboy tools]# mkdir -p /application/ [root@oldboy tools]# mv mysql-5.5.60-linux-glibc2.12-x86_64 /application/mysql-5.5.60 [root@oldboy tools]# ln -s /application/mysql-5.5.60/ /application/mysql
以/data目錄做爲mysql多實例的總根目錄,在/data下建立mysql實例端口號330六、3307的二級目錄,不一樣的端口號表明不一樣的實例,各個實例目錄下又包含各自的數據文件、配置文件及啓動文件。centos
[root@oldboy tools]# mount /dev/cdrom /mnt mount: block device /dev/sr0 is write-protected, mounting read-only [root@oldboy tools]# cd /mnt/Packages/ [root@oldboy Packages]# rpm -ivh tree-1.5.3-2.el6.x86_64 [root@oldboy Packages]# mkdir -p /data/{3306,3307}/data [root@oldboy Packages]# tree /data /data ├── 3306 │ └── data └── 3307 └── data 4 directories, 0 files
配置mysql配置文件服務器
[root@oldboy Packages]# mv /etc/my.cnf /etc/my.cnf.bak [root@oldboy Packages]# cd /application/mysql/support-files/ [root@oldboy support-files]# cp my-small.cnf /etc/my.cnf
再將事先編輯好的兩個my.cnf配置文件分別放置到/data/3306/和/data/3307/下,兩個 mysql配置文件分別放置到/data/3306/和/data/3307/下(3306和3307的兩對配置文件除了端口3306和3307不一樣,其餘徹底相同),修改所屬組和權限app
[root@oldboy ~]# chown -R mysql.mysql /data [root@oldboy ~]# chmod +x /data/{3306,3307}/mysql
3306的my.cnf內容以下socket
[client] port=3306 socket= /data/3306/mysql.sock [mysql] no-auto-rehash [mysqld] user = mysql port = 3306 socket = /data/3306/mysql.sock basedir = /application/mysql datadir = /data/3306/data open_files_limit=1024 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 #log_long_format #log-error = /data/3306/error.log #log-slow-queries =/data/3306/slow.log 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 #myisam_sort_buffer_size = 1M #myisam_max_sort_file_size = 10G #myisam_max_extra_sort_file_size = 10G #myisam_repair_threads = 1 #myisam_recover lower_case_table_names = 1 skip-name-resolve slave-skip-errors = 1032,1062 replicate-ignore-db=mysql server-id = 1 innodb_additional_mem_pool_size = 4M innodb_buffer_pool_size = 32M innodb_data_file_path = ibdata1:128M:autoextend innodb_file_io_threads = 4 innodb_thread_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 [mysqld_safe] log-error=/data/3306/mysql3306.err pid-file=/data/3306/mysqld.pid
3306的mysql文件內容以下tcp
#!/bin/sh ###################################### ###################################### #init port=3306 mysql_user="root" mysql_pwd="oldboy" CmdPath="/application/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 "Restarting 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 {start|stop|restart}\n" esac
設置PATH環境變量
[root@oldboy ~]# echo 'export PATH=/application/mysql/bin:$PATH'>>/etc/profile [root@oldboy ~]# source /etc/profile [root@oldboy ~]# echo $PATH /application/mysql/bin:/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
安裝兩個mysql實例,出現兩個ok表示此步驟沒有問題
[root@oldboy ~]# cd /application/mysql/scripts/ [root@oldboy scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3306/data --user=mysql ………………… Installing MySQL system tables... 180727 2:45:31 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 180727 2:45:31 [Note] /application/mysql/bin/mysqld (mysqld 5.5.60) starting as process 60182 ... OK Filling help tables... 180727 2:45:31 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 180727 2:45:31 [Note] /application/mysql/bin/mysqld (mysqld 5.5.60) starting as process 60189 ... OK ………………… [root@oldboy scripts]# ./mysql_install_db --basedir=/application/mysql --datadir=/data/3307/data --user=mysql ………………… Installing MySQL system tables... 180727 2:47:01 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 180727 2:47:01 [Note] /application/mysql/bin/mysqld (mysqld 5.5.60) starting as process 60234 ... OK Filling help tables... 180727 2:47:01 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap. 180727 2:47:01 [Note] /application/mysql/bin/mysqld (mysqld 5.5.60) starting as process 60241 ... OK …………………
啓動mysql實例,先啓動3306實例
[root@oldboy scripts]# /data/3306/mysql start Starting MySQL... [root@oldboy scripts]# 180727 02:49:17 mysqld_safe error: log-error set to '/data/3306/mysql3306.err', however file don't exists. Create writable for user 'mysql'.
上面報log-error '/data/3306/mysql3306.err'不能存在,那麼建立
[root@oldboy scripts]# cd /data [root@oldboy data]# touch 3306/mysql3306.err [root@oldboy data]# touch 3307/mysql3307.err [root@oldboy data]# chown mysql.mysql 3306/mysql3306.err [root@oldboy data]# chown mysql.mysql 3307/mysql3307.err
再分別啓動和登陸登陸兩個實例,啓動後經過netstat -lntup查看啓動狀況,多實例登陸時須要經過-S指定sock文件,且初次登陸沒有密碼
[root@oldboy data]# /data/3306/mysql start Starting MySQL... [root@oldboy data]# /data/3307/mysql start Starting MySQL... [root@oldboy 3306]# netstat -lntup|grep 33 tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 771/mysqld tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 803/mysqld [root@oldboy data]# mysql -S /data/3306/mysql.sock (無密碼登陸) [root@oldboy data]# mysql -S /data/3307/mysql.sock (無密碼登陸)
經過/application/mysql/bin下的mysqladmin命令給兩個實例設置root密碼,再經過密碼登陸mysql
[root@oldboy data]# mysqladmin -u root -S /data/3306/mysql.sock password "oldboy" [root@oldboy data]# mysqladmin -u root -S /data/3307/mysql.sock password "oldboy" [root@oldboy data]# mysql -uroot -poldboy -S /data/3306/mysql.sock(有密碼登陸) mysql> system mysql -uroot -poldboy -S /data/3307/mysql.sock(在3306實例中經過system系統命令切換到3307實例)
設置多實例開機自啓動
[root@oldboy data]# echo "#mysql multi instance start when system starting" >>/etc/rc.local [root@oldboy data]# echo "/data/3306/mysql start" >>/etc/rc.local [root@oldboy data]# echo "/data/3307/mysql start" >>/etc/rc.local [root@oldboy data]# tail -3 /etc/rc.local tail: inotify cannot be used, reverting to polling #mysql multi instance start when system starting /data/3306/mysql start /data/3307/mysql start