本篇內(nèi)容介紹了“怎么在Linux中運(yùn)行多個(gè)MySQL”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一種在Linux上運(yùn)行多個(gè)MySQL實(shí)例的方法是用不同的默認(rèn)TCP/IP端口和Unix套接字文件編譯不同的服務(wù)器,以便每個(gè)服務(wù)器都監(jiān)聽(tīng)不同的網(wǎng)絡(luò)接口。為了在每個(gè)不同的基本目錄中進(jìn)行編譯,還會(huì)自動(dòng)生成一個(gè)單獨(dú)的、編譯后的數(shù)據(jù)目錄、日志文件和每個(gè)服務(wù)器的PID文件位置。
假設(shè)一個(gè)現(xiàn)有的5.6服務(wù)器被配置成TCP/IP端口為3306并且Unix socket文件為/tmp/mysql.sock。為了配置一個(gè)新的5.7.21服務(wù)器使用不同的操作參數(shù),使用CMake命令進(jìn)行編譯:
shell> cmake . -DMYSQL_TCP_PORT=port_number \
-DMYSQL_UNIX_ADDR=file_name \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-5.7.21
這里,port_number和file_name必須與缺省的TCP/CP端口號(hào)和Unix socket文件路徑名不同,并且CMAKE_INSTALL_PREFIX值指定的安裝目錄不能是現(xiàn)有MySQL安裝目錄相同的目錄。
如果有一個(gè)MySQL服務(wù)器正在監(jiān)聽(tīng)一個(gè)指定的端口號(hào),你可以使用下面的命令來(lái)找出多個(gè)重要配置變量所使用的操作參數(shù),包括base目錄和Unix socket文件名:
shell> mysqladmin --host=host_name --port=port_number variables
通過(guò)命令所顯示的信息,你也可以知道當(dāng)配置另一個(gè)服務(wù)器時(shí)什么選項(xiàng)值將不能使用。
如果指定localhost作為主機(jī)名,mysqladmin缺省會(huì)使用一個(gè)Unix socket文件來(lái)進(jìn)行連接而不是使用TCP/IP。為了顯性指定連接協(xié)議,使用--protocol={TCP|SOCKET|PIPE|MEMORY}選項(xiàng)。
如果只是使用不同的Unix socket文件和TCP/IP端口來(lái)啟動(dòng)一個(gè)MySQL實(shí)例那么不需要編譯一個(gè)新的MySQL服務(wù)器。可以使用相同的服務(wù)器二進(jìn)制文件并且在運(yùn)行時(shí)為每個(gè)MySQL實(shí)例使用不同的參數(shù)。一種方式是使用命令行選項(xiàng):
shell>mysqld_safe --socket=file_name --port=port_number
為了啟動(dòng)第二個(gè)MySQL實(shí)例,給mysqld_safe提供不同的--socket和--port選項(xiàng)值并傳一個(gè)--datadir=dir_name選項(xiàng)因此這個(gè)實(shí)例將使用不同的數(shù)據(jù)目錄。
另一種方法是將每個(gè)MySQL實(shí)例的選項(xiàng)放入不同的選項(xiàng)文件,然后啟動(dòng)每個(gè)實(shí)例時(shí)使用--defaults-file選項(xiàng)來(lái)指定合適選項(xiàng)文件的路徑。
shell> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf shell> mysqld_safe --defaults-file=/usr/local/mysql/my.cnf2
另一種方法來(lái)完成相同的功能是使用環(huán)境變量來(lái)設(shè)置Unix socket文件名和TCP/IP端口號(hào):
shell> MYSQL_UNIX_PORT=/tmp/mysqld-new.sock shell> MYSQL_TCP_PORT=3307 shell> export MYSQL_UNIX_PORT MYSQL_TCP_PORT shell> mysql_install_db --user=mysql shell> mysqld_safe --datadir=/path/to/datadir &
這是一種快速啟動(dòng)第二個(gè)實(shí)例進(jìn)行測(cè)試的方法。它的好處是設(shè)置的環(huán)境變量可以應(yīng)用到從相同shell執(zhí)行調(diào)用的任何客戶端程序。因此對(duì)于這些客戶端連接會(huì)自動(dòng)指向第二實(shí)例。
另一種方法是在Linux中使用mysqld_multi腳本來(lái)管理多個(gè)MySQL實(shí)例。
下面來(lái)創(chuàng)建三個(gè)實(shí)例(實(shí)例的端口號(hào)為3307,3308,3309)
創(chuàng)建存儲(chǔ)這三個(gè)實(shí)例的數(shù)據(jù)庫(kù)文件目錄
-bash-4.2$ mkdir mysql3307 -bash-4.2$ mkdir mysql3308 -bash-4.2$ mkdir mysql3309 -bash-4.2$ ls -lrt 總用量 4 drwxrwxrwx. 5 mysql mysql 4096 8月 22 21:46 mysql drwxr-xr-x. 2 mysql mysql 6 9月 4 10:26 mysql3307 drwxr-xr-x. 2 mysql mysql 6 9月 4 10:26 mysql3308 drwxr-xr-x. 2 mysql mysql 6 9月 4 10:26 mysql3309
為每個(gè)實(shí)例創(chuàng)建一個(gè)選項(xiàng)文件(my3307.cnf,my3308.cnf,my3309.cnf)
my3307.cnf文件內(nèi)容如下:
-bash-4.2$ cat my3307.cnf [mysqld] basedir=/mysqlsoft/mysql datadir=/mysqldata/mysql3307 bind-address=0.0.0.0 user=mysql port=3307 log-error=/mysqldata/mysql3307/mysql.err pid-file=/mysqldata/mysql3307/mysqld.pid socket = /mysqldata/mysql3307/mysql.sock character-set-server=utf8mb4 default-storage-engine=INNODB explicit_defaults_for_timestamp = true
my3308.cnf文件內(nèi)容如下:
-bash-4.2$ cat my3308.cnf [mysqld] basedir=/mysqlsoft/mysql datadir=/mysqldata/mysql3308 bind-address=0.0.0.0 user=mysql port=3308 log-error=/mysqldata/mysql3308/mysql.err pid-file=/mysqldata/mysql3308/mysqld.pid socket = /mysqldata/mysql3308/mysql.sock character-set-server=utf8mb4 default-storage-engine=INNODB explicit_defaults_for_timestamp = true
my3309.cnf文件內(nèi)容如下:
-bash-4.2$ cat my3309.cnf [mysqld] basedir=/mysqlsoft/mysql datadir=/mysqldata/mysql3309 bind-address=0.0.0.0 user=mysql port=3309 log-error=/mysqldata/mysql3309/mysql.err pid-file=/mysqldata/mysql3309/mysqld.pid socket = /mysqldata/mysql3309/mysql.sock character-set-server=utf8mb4 default-storage-engine=INNODB explicit_defaults_for_timestamp = true
初始化數(shù)據(jù)庫(kù)
-bash-4.2$ mysqld --defaults-file=/mysqlsoft/mysql/my3307.cnf --initialize --basedir=/mysqlsoft/mysql --datadir=/mysqldata/mysql3307 --user=mysql -bash-4.2$ mysqld --defaults-file=/mysqlsoft/mysql/my3308.cnf --initialize --basedir=/mysqlsoft/mysql --datadir=/mysqldata/mysql3308 --user=mysql -bash-4.2$ mysqld --defaults-file=/mysqlsoft/mysql/my3309.cnf --initialize --basedir=/mysqlsoft/mysql --datadir=/mysqldata/mysql3309 --user=mysql
啟動(dòng)數(shù)據(jù)庫(kù)
-bash-4.2$ mysqld_safe --defaults-file=/mysqlsoft/mysql/my3307.cnf & [1] 10359 -bash-4.2$ 2019-09-05T09:39:35.467416Z mysqld_safe Logging to '/mysqldata/mysql3307/mysql.err'. 2019-09-05T09:39:35.545107Z mysqld_safe Starting mysqld daemon with databases from /mysqldata/mysql3307 -bash-4.2$ mysqld_safe --defaults-file=/mysqlsoft/mysql/my3308.cnf & [1] 10624 -bash-4.2$ 2019-09-05T09:42:28.457387Z mysqld_safe Logging to '/mysqldata/mysql3308/mysql.err'. 2019-09-05T09:42:28.532350Z mysqld_safe Starting mysqld daemon with databases from /mysqldata/mysql3308 -bash-4.2$ mysqld_safe --defaults-file=/mysqlsoft/mysql/my3309.cnf & [1] 10889 -bash-4.2$ 2019-09-05T09:45:03.772185Z mysqld_safe Logging to '/mysqldata/mysql3309/mysql.err'. 2019-09-05T09:45:03.847584Z mysqld_safe Starting mysqld daemon with databases from /mysqldata/mysql3309
修改每個(gè)MySQL實(shí)例的用戶密碼并關(guān)閉實(shí)例
-bash-4.2$ mysql --port=3307 --host=127.0.0.1 --user=root --password=nCohVRg-=7LP mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.26 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye -bash-4.2$ mysqladmin --port=3307 --host=127.0.0.1 --user=root --password=123456 shutdown mysqladmin: [Warning] Using a password on the command line interface can be insecure. -bash-4.2$ mysql --port=3308 --host=127.0.0.1 --user=root --password=g*tV/I%#s6j# mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.26 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye -bash-4.2$ mysqladmin --port=3308 --host=127.0.0.1 --user=root --password=123456 shutdown mysqladmin: [Warning] Using a password on the command line interface can be insecure. -bash-4.2$ mysql --port=3309 --host=127.0.0.1 --user=root --password=eIsXkThGK5*4 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.26 Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye -bash-4.2$ mysqladmin --port=3309 --host=127.0.0.1 --user=root --password=123456 shutdown mysqladmin: [Warning] Using a password on the command line interface can be insecure.
使用mysqld_multi來(lái)管理多個(gè)MySQL實(shí)例
修改配置文件my.cnf增加以下內(nèi)容(增加三個(gè)實(shí)例的選項(xiàng)參數(shù))
[mysqld_multi] mysqld=/mysqlsoft/mysql/bin/mysqld_safe mysqladmin =/mysqlsoft/mysql/bin/mysqladmin log =/mysqlsoft/mysql/mysqld_multi.log [mysqld1] basedir=/mysqlsoft/mysql datadir=/mysqldata/mysql3307 bind-address=0.0.0.0 user=mysql port=3307 log-error=/mysqldata/mysql3307/mysql.err pid-file=/mysqldata/mysql3307/mysqld.pid socket = /mysqldata/mysql3307/mysql.sock character-set-server=utf8mb4 default-storage-engine=INNODB explicit_defaults_for_timestamp = true [mysqld2] basedir=/mysqlsoft/mysql datadir=/mysqldata/mysql3308 bind-address=0.0.0.0 user=mysql port=3308 log-error=/mysqldata/mysql3308/mysql.err pid-file=/mysqldata/mysql3308/mysqld.pid socket = /mysqldata/mysql3308/mysql.sock character-set-server=utf8mb4 default-storage-engine=INNODB explicit_defaults_for_timestamp = true [mysqld3] basedir=/mysqlsoft/mysql datadir=/mysqldata/mysql3309 bind-address=0.0.0.0 user=mysql port=3309 log-error=/mysqldata/mysql3309/mysql.err pid-file=/mysqldata/mysql3309/mysqld.pid socket = /mysqldata/mysql3309/mysql.sock character-set-server=utf8mb4 default-storage-engine=INNODB explicit_defaults_for_timestamp = true
使用mysqld_multi來(lái)啟動(dòng)實(shí)例
[mysql@localhost ~]$ mysqld_multi start 1
報(bào)錯(cuò)了,從日志可以看到啟動(dòng)實(shí)例時(shí)調(diào)用了兩次,我這里的測(cè)試環(huán)境在創(chuàng)建多個(gè)實(shí)例之前創(chuàng)建了一個(gè)mysqld實(shí)例(也許存在影響)
[mysql@localhost mysql]$ tail -f mysqld_multi.log Starting MySQL servers 2019-09-06T05:40:07.558168Z mysqld_safe Logging to '/mysqldata/mysql3307/mysql.err'. 2019-09-06T05:40:07.563783Z mysqld_safe Logging to '/mysqldata/mysql3307/mysql.err'. 2019-09-06T05:40:07.618543Z mysqld_safe Starting mysqld daemon with databases from /mysqldata/mysql3307 2019-09-06T05:40:07.623821Z mysqld_safe Starting mysqld daemon with databases from /mysqldata/mysql3307 root@localhost mysql3307]# tail -f mysql.err 2019-09-06T06:24:30.964335Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files. 2019-09-06T06:24:31.964485Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11 2019-09-06T06:24:31.964573Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files. 2019-09-06T06:24:32.964723Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11 2019-09-06T06:24:32.964812Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files. 2019-09-06T06:24:33.964935Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11 2019-09-06T06:24:33.964987Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files. 2019-09-06T06:24:34.965105Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11 2019-09-06T06:24:34.965178Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files. 2019-09-06T06:24:35.965292Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11 2019-09-06T06:24:35.965340Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files. 2019-09-06T06:24:36.965460Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11 2019-09-06T06:24:36.965509Z 0 [Note] InnoDB: Check that you do not already have another mysqld process using the same InnoDB data or log files. 2019-09-06T06:24:37.965632Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 11
所以這里在使用mysqld_multi來(lái)啟動(dòng)實(shí)例時(shí)使用--defaults-file
[mysql@localhost bin]$ mysqld_multi --defaults-file=/mysqlsoft/mysql/my.cnf start 1 [mysql@localhost bin]$ mysqld_multi --defaults-file=/mysqlsoft/mysql/my.cnf start 2,3 [mysql@localhost mysql]$ tail -f mysqld_multi.log Starting MySQL servers 2019-09-06T06:49:50.003877Z mysqld_safe Logging to '/mysqldata/mysql3307/mysql.err'. 2019-09-06T06:49:50.096954Z mysqld_safe Starting mysqld daemon with databases from /mysqldata/mysql3307 mysqld_multi log file version 2.16; run: 五 9月 6 14:59:33 2019 Starting MySQL servers 2019-09-06T06:59:33.644263Z mysqld_safe Logging to '/mysqldata/mysql3308/mysql.err'. 2019-09-06T06:59:33.650226Z mysqld_safe Logging to '/mysqldata/mysql3309/mysql.err'. 2019-09-06T06:59:33.704593Z mysqld_safe Starting mysqld daemon with databases from /mysqldata/mysql3308 2019-09-06T06:59:33.710937Z mysqld_safe Starting mysqld daemon with databases from /mysqldata/mysql3309
到此使用mysqld_multi來(lái)管理多個(gè)實(shí)例的操作就完成了。
“怎么在Linux中運(yùn)行多個(gè)MySQL”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
當(dāng)前題目:怎么在Linux中運(yùn)行多個(gè)MySQL-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://chinadenli.net/article32/ehppc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、全網(wǎng)營(yíng)銷推廣、做網(wǎng)站、面包屑導(dǎo)航、移動(dòng)網(wǎng)站建設(shè)、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容