>  기사  >  데이터 베이스  >  하나의 머신에서 여러 MySQL 서비스를 실행하는 방법을 가르쳐주세요.

하나의 머신에서 여러 MySQL 서비스를 실행하는 방법을 가르쳐주세요.

Y2J
Y2J원래의
2017-05-23 14:48:021287검색

************************************************************************ ***** ***********

1부, 하나의 서버에 여러 개의 mysql 서비스 구축

************ ***** *****************************************


1. 소개

Mysql에는 물리적 서버에서 여러 개의 MySQL 서비스를 실행할 수 있는 mysqld_multi 명령어가 있습니다. 오늘은 몇 가지 문서를 참고해서 직접 테스트해서 합격했습니다. 이제 작업 과정을 공유하겠습니다!

운영 체제: Linux 2.6.13(Slackware), 다른 버전의 Linux도 유사할 것입니다.

Mysql 4.0.17 소스 프로그램 설치 (최신 5.1.*도 있을 것으로 예상) 거의 며칠 후에 다시 시도해 보세요.

계획: mysql 서비스 4개 실행:

서버 이름 가정 : db-app (IP는 192.168.0.100),

서버 이름은 db-app2 (IP는 192.168.0.101),

두 번째 부분까지 다음은 mysql에 대한 내용입니다. db-app,


두 번째, 준비

mysql 소스 프로그램을 이용하여 설치하는데, 설치 시 configura 옵션을 사용한다고 가정해보자.


./configure - -prefix=/usr/local/mysql --datadir=/usr /local/mysql/data1 --sysconfdir=/etc

참고: --prefix는 MYSQL을 /usr/local/mysql에 설치합니다.

--datadir은 데이터베이스를 /usr/local /mysql/data1에 생성합니다.

sysconfdir은 mysql에서 사용하는 my.cnf 구성 파일의 검색 경로를 /etc
다른 mysql 설치 절차는 생략됩니다.


Mysql 관리 매뉴얼에 따르면 각 Mysql 서비스는 독립적일 수 있으므로 my.cnf에서 모두 다른 시작 옵션을 호출합니다. 아래 GNR 값은 서로 다른 포트를 사용하여 생성됩니다. 각 소켓 파일과 서비스 데이터베이스는 독립적입니다. (자세한 내용은 mysql 공식 홈페이지의 영문 관리 매뉴얼을 참고하세요.


mysqld_multi 여러 mysqld를 관리하는 서비스 프로세스입니다. 이러한 서비스 프로세스 프로그램은 서로 다른 유닉스 소켓이 서로 다른 포트에서 수신 대기할 수 있습니다. 현재 서비스 상태를 시작, 중지 및 모니터링할 수 있습니다.


----프로그램은 my.cnf(또는 --config-file에서 사용자 정의된 구성 파일)의 [mysqld#] 섹션을 검색합니다. "#"은 양의 정수일 수 있습니다. 이 양의 정수가 아래에서 언급하는 세그먼트 시퀀스, 즉 GNR이다. 세그먼트의 일련 번호는 서로 다른 세그먼트를 구별하기 위해 mysqld_multi의 매개변수로 사용되므로 특정 mysqld 프로세스의 시작 및 중지를 제어하거나 보고서 정보를 얻을 수 있습니다. 이 그룹의 매개변수는 mysqld를 시작하는 데 필요한 그룹의 매개변수와 같습니다. 그러나 여러 서비스를 사용하는 경우 각 서비스에 대해 Unix 소켓 또는 포트를 지정해야 합니다(http://mifor.4dian.org mysqld_multi 프로그램을 사용하여 여러 MySQL 서비스 관리에서 발췌).


위 본문에서 볼 수 있듯이 여러 MySQL 서비스 중 가장 중요한 것은 my.cnf 구성 파일입니다.

이제 my.cnf 파일을 게시합니다.- -- --------------------


[mysqld_multi]

mysqld = /usr/local/mysql/bin /mysqld_safe

mysqladmin = /usr/local/mysql/bin/mysqladmin

user = mysql (같은 계정을 사용하기 때문에 모든 mysql 서버를 시작하려면 하나의 계정을 사용하세요. 이 계정은 무엇인가요? ? 모든 mysql 서비스에서 사용하는 계정이어야 하며, 아래 비밀번호는

password = mypaswd


[mysqld1]
포트 = 3306

소켓 = /tmp/mysql.sock1

pid-file=/usr/local/mysql/data1/db-app1.pid

로그 =/usr/local/mysql/data1/db-app.log

datadir = /usr/local/mysql/data

user = mysql


[ mysqld2]

port = 3307

socket = /tmp/mysql.sock2

pid-file = /usr/local/mysql/data2/db-app2.pid

datadir = /usr/local/mysql/data2

log=/usr/local/mysql/data2/db-app.log

user = mysql


[mysqld3]

포트 = 3308

소켓 = /tmp/mysql.sock3

pid-file = /usr/local/mysql/data3/ db-app3.pid3

datadir = /usr/local/mysql/data3

log=/usr/local/mysql/data3/db-app.log

사용자 = mysql


[mysqld4]

port = 3309

socket = /tmp/mysql.sock4

pid-file = /usr/ local/mysql/data3/db-app4.pid

datadir = /usr/local/mysql/data4

log=/usr/local/mysql/data4/db-app.log

user = mysql


[mysqldump]

빠른

max_allowed_packet = 16M


[mysql]

자동 재해시 없음


[isamchk]

key_buffer = 128M

sort_buffer_size = 128M

read_buffer = 2M

write_buffer = 2M


[myisamchk]

key_buffer = 128M

sort_buffer_size = 128M

read_buffer = 2M

write_b 버퍼 = 2M


[mysqlhotcopy]

interactive-timeout

내 구성 파일에는 mysqld1, mysqld2, mysqld3, mysqld4가 있습니다. 즉, 동일한 서버의 서로 다른 포트(3306-3309)에서 4개의 mysql 서비스를 시작합니다. 각 datadir에 지정된 데이터베이스 파일 경로는 다르며 각각 고유한 로그 파일이 있습니다. 일부 다른 설정은 my.cnf의 원본 콘텐츠를 사용할 수 있습니다.


좋아요. 중요한 my.cnf가 편집되었습니다. 이제 구성에서 다양한 mysql 서비스에 대해 별도의 폴더와 초기 데이터베이스를 만듭니다. >
[mysqld1]은 기본 설정이므로 mysql을 설치할 때 이미 존재하므로 걱정하지 마세요.


[mysqld2]에 따라 디렉터리를 만드세요. 디렉터리가 mysql 관리 권한으로 변경됩니다.


db-app:/ # mkdir /usr/local/mysql/data2


데이터베이스를 사용하려면 기본 mysql 데이터베이스를 복사하여 다른 mysql 계정을 사용하고 애플리케이션에 따라 다른 데이터베이스를 생성할 수 있습니다.


db-app:/ # cp /usr/local/mysql/data1/mysql /usr /local/mysql/data2 -R

db-app:/ # chmod mysql.mysql /usr/local/mysql/data2 -R


[mysqld3],[ mysqld4] , 동일합니다.


이 디렉토리가 존재하는지 확인할 수 있습니다.

db-app:/ # ls -l /usr/local/mysql/


drwxr-xr-x 6 mysql mysql 4096 4월 9일 17:54 data4

drwxr-x--- 2 mysql mysql 4096 4월 9일 17:14 data1

drwxr-xr - x 3 mysql mysql 4096 Apr 9 17:54 data2

drwxr-xr-x 3 mysql mysql 4096 Apr 9 17:54 data3


이제 mysqld_multi를 통해 시작할 수 있습니다.


세 번째, mysqld_multi 명령.

mysqld_multi를 시작하려면 다음 매개변수를 사용하세요. (참고: 이 명령은 위에서 언급한 것처럼 mysql의 bin 디렉터리에 있습니다./configure --prefix =/usr/local/mysql, 따라서 파일은 설치 시 지정한 경로에 따라 달라지는 /usr/local/mysq/bin에 있어야 합니다.

db-app:/ # mysqld_multi [options] { start|stop|report} [GNR[,GNR]...]


시작, 중지 및 보고는 수행하려는 작업을 참조하세요. 옵션 다음에 나오는 GNR 목록과 구별하여 단일 서비스 또는 여러 서비스에 대한 작업을 지정할 수 있습니다. GNR 목록을 지정하지 않으면 mysqld_multi는 모든 서비스에서 옵션 파일에 따라 동작합니다.


각 GNR의 값은 그룹의 시퀀스 번호 또는 그룹의 시퀀스 번호 범위입니다. 이 항목의 값은 그룹 이름의 마지막 숫자여야 합니다. 예를 들어 그룹 이름이 mysqld17이면 이 항목의 값은 17입니다. 범위를 지정하는 경우 "-"(대시)를 사용하여 연결합니다. 두 개의 숫자. GNR의 값이 10-13이면 mysqld10 그룹을 mysqld13 그룹으로 참조합니다. 여러 그룹 또는 그룹 범위는 명령줄에서 ","(쉼표)로 구분하여 지정할 수 있습니다. 공백 문자(예: 공백 또는 탭)는 사용할 수 없습니다. 공백 문자 뒤에 오는 매개변수는 무시됩니다. (참고: GNR 값은 my.cnf에 정의한 mysqld#의 값입니다. 여기에는 1-4만 있습니다.



db-app:/ # /usr/local /mysq /bin/mysqld_multi --config-file=/etc/my.cnf start 1 첫 번째 mysql 서비스만 시작하고 관련 파일은 my.cnf의 mysql1에 의해 설정됩니다. -app: / # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf stop 1 첫 번째 mysql 서비스 시작 및 중지


db-app:/ # /usr /local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf start 1-4, 실제로 여기에 있는 전부인 1~4번째 mysql 서비스를 시작합니다.


db-app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf 보고서 1-4


시작 보기:


db-app:/ # ps aux


root 10467 0.0 0.2 2712 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local/mysql/ bin/mysqld_safe -- 포트=3306 --socket=/tmp/mysql.sock1

root 10475 0.0 0.2 2712 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local/mysql /bin/mysqld_safe - -port=3307 --socket=/tmp/mysql.sock2

root 10482 0.0 0.2 2716 1300 pts/0 S 18:59 0:00 /bin/sh /usr/local/ mysql/bin/mysqld_safe --port=3308 --socket=/tmp/mysql.sock3

루트 10487 0.0 0.2 2716 1300 포인트/0 S 18:59 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --port=3309 --socket=/tmp/mysql.sock4

.................................................


넷째, 클라이언트 액세스

모든 클라이언트 액세스는 지정된 데이터베이스 서비스에 들어가려면 액세스 포트를 지정해야 합니다. 그렇지 않으면 MySQL 기본 포트(3306)에서 제공되는 MYSQL이 됩니다. 사용된.

******************************************** **** ****************

2부, 하나의 서버에 여러 개의 mysql 메인 서비스 구축

****** **** **********************************************


팁: 다음 마스터-슬레이브 복제를 위해 특별히 계정을 만듭니다. 이 예에 사용된 계정 repl에는 '1234567890'이라는 비밀번호가 있으며, 이를 통해 select_priv, reload_priv, process_priv, grant_priv를 가질 수 있습니다. , super_priv, repl_slave_priv, repl_client_priv 권한이며 모든 클라이언트를 통해 접근 가능합니다. 즉, 접근 클라이언트는 '%'입니다.

주된 목적은 my.cnf의 내용을 수정하여 각 mysql이 자체 bin-log 파일과 자체 운영 환경을 생성할 수 있도록 하는 것입니다. 이제 my.cnf의 전체 내용을 붙여넣으세요. 관련 매개변수는 mysql에


#[client]

#password = your_password

#port = 3306

#socket입니다. = /tmp/mysql .sock


[mysqld_multi]

mysqld = /usr/local/mysql/bin/mysqld_safe

mysqladmin = /usr/local/ mysql/bin/mysqladmin

user = mysql

password = mypasswd

[mysqld1]

port = 3306

socket = / tmp/mysql.sock1

잠금 건너뛰기

pid-file=/usr/local/mysql/data/net-app1a.pid

datadir = /usr/local /mysql/data

log=/usr/local/mysql/data/net-app1.log

user = mysql

log-slow-queries=/usr/ local/mysql/data /slowquery.log

long_query_time = 2

key_buffer = 256M

max_allowed_packet = 1M

table_cache = 512

sort_buffer_size = 2M

read_buffer_size = 2M 2

max_connections=500

log-bin

log-bin=/usr/local/mysql/data /app-net1_1-bin

서버 ID = 1


[mysqld2]

포트 = 3307

소켓 = /tmp/mysql .sock2

pid-file = /usr/local/mysql/data2 /net-app1b.pid

datadir = /usr/local/mysql/data2

log= /usr/local/mysql/data2/net-app1.log

사용자 = mysql

log-slow-queries=/usr/local/mysql/data2/slowquery.log

key_buffer = 128m
max_allowed_packet = 1m

table_cache = 512

sort_buffer_size = 1m read_buffer_size = 1M

myisam_sort_buffer_size = 32M

thread_cache = 32

query_cache_size = 16M

thread_concurrency = 2

max_connections=300

log-bin

log-bin=/usr/local/ mysql/data2/app-net1_2-bin

server-id = 1


[ mysqld3]

port = 3308

socket = / tmp/mysql.sock3

건너뛰기 잠금

pid-file = /usr/local/mysql /data3/net-app1c.pid

datadir = /usr/local /mysql/data3

log=/usr/local/mysql/data3/net-app1.log

user = mysql

log-bin

log-bin=/usr/local/mysql/data3/app-net1_3-bin

server-id = 1


[mysqld4]

port = 3309

socket = /tmp/mysql.sock4

건너뛰기 잠금

pid -file = /usr/local/mysql/data1/app-net1d.pid

datadir = /usr/local/mysql/data1

log=/usr/local/mysql/data1/ net-app1.log

user = mysql

log-bin

log-bin=/usr/local/mysql/data1/app-net1_4-bin

서버 ID = 1


[mysqldump]

빠른

max_allowed_packet = 16M


[mysql]

자동 재해시 없음

#SQL에 익숙하지 않은 경우 다음 주석 문자를 제거하세요

#safe-updates


[isamchk]

key_buffer = 128M

sort_buffer_size = 128M

read_buffer = 2M

write_buffer = 2M


[myisamchk]

key_buffer = 128M

sort_b buffer_size = 128M

read_buffer = 2M

write_buffer = 2M


[mysqlhotcopy]

interactive-timeout


* *********************


여러 mysql 서비스를 시작하는 것도 동일합니다.

db-app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf 시작 1-4

******************** ******* *****************************************

3부, 하나의 서버에 여러 개의 mysql 슬레이브 서비스 구축

**************************** ******** ***************************

슬레이브 서버 구축을 위한 사전 선택 준비 : 마스터 서버의 모든 mysql을 중지하려면 mysqld_multi를 사용하는 것이 좋습니다. 데이터베이스 디렉터리를 제외한 데이터 디렉터리의 모든 파일을 삭제합니다. (이 문서에는 /usr/local/mysql에 datadir = data1 -- data1 4개의 데이터 디렉터리가 있습니다. /). 마스터와 슬레이브 모두 동일한 데이터 디렉터리 경로를 사용합니다.

Tar 명령을 사용하여 각 데이터베이스를 캡슐화하고 sftp 명령을 통해 슬레이브 서버(db-app1 192.168.0.101)에 넣거나 가져옵니다.


다음 작업은 다음과 같습니다. 참조:

db-app 호스트에서의 작업

db-app:/ # tar -cf data1.tar /usr/local/mysql/data1

db-app :/ # tar -cf data2.tar /usr/local/mysql/data2

db-app:/ # tar -cf data3.tar /usr/local/mysql/data3

db -app: / # tar -cf data4.tar /usr/local/mysql/data4


db-app1 호스트에서의 작업


db-app1:/ # tar xvf data1.tar

db-app1:/ # tar xvf data2.tar

db-app1:/ # tar xvf data3.tar

db-app1:/ # tar xvf data4.tar


동시에 시스템 계정 mysql이 마스터/슬레이브 서버의 mysql 데이터 디렉토리에 대한 운영 권한을 갖고 있는지 확인하시기 바랍니다. 확인이 불가능할 경우 직접 변경하시면 됩니다. 이 디렉토리의 소유권.

db-app 호스트에서의 작업

db-app:/ # chown mysql.mysql /usr/local/mysql/data1 -R

db-app: / # chown mysql.mysql /usr/local/mysql/data2 -R

db-app:/ # chown mysql.mysql /usr/local/mysql/data3 -R

db-app :/ # chown mysql.mysql /usr/local/mysql/data4 -R


db-app1 호스트에서의 작업

db-app1:/ # chown mysql /usr. /local/mysql/data1 -R

db-app2:/ # chown mysql.mysql /usr/local/mysql/data2 -R

db-app3:/ # chown mysql.mysql /usr/local/mysql/data3 -R

db-app4:/ # chown mysql.mysql /usr/local/mysql/data4 -R


다음은

팁: 아래 my.cnf에 언급된 계정이 있습니다: repl, 비밀번호는 '1234567890', 이 계정은 위에서 특별히 생성되었습니다.

사실 모두 동일합니다. 중요한 것은 my.cnf의 내용을 수정하여 각 슬레이브 mysql이 메인 mysql의 다른 포트를 통해 자체 bin-log를 얻어 업데이트할 수 있도록 하는 것입니다. 자체 생성된 데이터베이스 콘텐츠. 이제 my.cnf의 모든 내용을 (서버에서) 붙여넣으세요. 관련 매개변수는 mysql 공식 매뉴얼을 참조하세요.


#[client]

#password = your_password

#port = 3306

#socket = /tmp/mysql.sock


[mysqld_multi]

mysqld = /usr/local/ mysql/ bin/mysqld_safe

mysqladmin = /usr/local/mysql/bin/mysqladmin

사용자 = mysql

password = netmoniit

[mysqld1]

포트 = 3306

소켓 = /tmp/mysql.sock1

잠금 건너뛰기

pid-file=/usr/local/mysql/data /net -app1a.pid

datadir = /usr/local/mysql/data

log=/usr/local/mysql/data/net-app1.log

user = mysql

log-slow-queries=/usr/local/mysql/data/slowquery.log

long_query_time = 2

key_buffer = 256M

max_allowed_packet = 1M

table_cache = 512 

sort_buffer_size = 2M 

read_buffer_size = 2M 

myisam_sort_buffer_size = 64M 

thread_cache = 32 

query_cache_size = 32M 

thread_concurrency = 2 

max_connections=500 

server-id = 2 

master-host = 192.168.0.100 

master-user = 'repl' 

master-password = '1234567890' 

master-port = 3309 

report-host = net-app1 

master-connect- 재시도 = 30 

log-bin 

log-slave-updates 



[mysqld2] 

포트 = 3307 

소켓 = /tmp/mysql.sock2 

pid-file = /usr/local/mysql/data2/net-app1b.pid 

datadir = /usr/local/mysql/ data2 

log=/usr/local/mysql/data2/net-app1.log 

user = mysql 

log-slow-queries=/usr/local/mysql /data2/slowquery.log 

long_query_time = 10 

key_buffer = 128M 

max_allowed_packet = 1M 

table_cache = 512 

sort_buffer _크기 = 1M 

read_buffer_size = 1M 

myisam_sort_buffer_size = 32M 

thread_cache = 32 

query_cache_size = 16M 

thread_concurr ency = 2 

max_connections=300 

server-id = 2 

master-host = 192.168.0.100 

master-user = 'repl' 

master- 비밀번호 = '1234567890' 

master-port = 3309 

report-host = net-app1 

master-connect-retry = 30 

log- bin 

log-slave-updates 



[mysqld3] 

port = 3308 

socket = /tmp/mysql.sock3

pid-file = /usr/local/mysql/data3/net-app1c.pid 

datadir = /usr/local/mysql/data3 

log=/usr /local/mysql/data3/net-app1.log 

user = mysql 

log-slow-queries=/usr/local/mysql/data3/slowquery.log 

long_query_time = 10 

key_buffer = 128M 

max_allowed_packet = 1M 

table_cache = 512 

sort_buffer_size = 1M 

read_ buffer_size = 1M 

myisam_sort_buffer_size = 32M 

thread_cache = 32 

query_cache_size = 16M 

thread_concurrency = 2 

max_connections=300 🎜>
server-id = 2 

master-host = 192.168.0.100 

master-user = 'repl' 

master-password = '1234567890' 

master-port = 3309 

report-host = net-app1 

master-connect-retry = 30 

log-bin 

log-slave- 업데이트 


[mysqld3] 

포트 = 3308 

소켓 = /tmp/mysql.sock4 

pid-file = /usr/local /mysql/data4/net-app1d.pid 

datadir = /usr/local/mysql/data4 

log=/usr/local/mysql/data4/net-app1.log 

사용자 = mysql 

log-slow-queries=/usr/local/mysql/data4/slowquery.log 

long_query_time = 10 

key_buffer = 128M 

max_allowed_packet = 1M 

table_cache = 512 

sort_buffer_size = 1M 

read_buffer_size = 1M

myisam_sort_buffer_size = 32 남

thread_cache = 32 

query_cache_size = 16M 

thread_concurrency = 2 

max_connections=300 

server-id = 2 

마스터 호스트 = 192.168.0.100 

master-user = 'repl' 

master-password = '1234567890' 

master-port = 3309 

report-host = net-app1 

master-connect-retry = 30 

log-bin 

log-slave-updates 



[ mysqldump] 

빠른 

max_allowed_packet = 16M 


[mysql] 

no-auto-rehash

# SQL에 익숙하지 않은 경우 다음 주석 문자를 제거하세요

#safe-updates


[isamchk]

key_buffer = 128M 🎜> key_buffer = 128M

sort_buffer_size = 128M

read_buffer = 2M

write_buffer = 2M


[mysqlhotcopy]

인터액티브 시간 초과


******************************** **********

이제 두 호스트에서 각각 여러 mysql 서비스를 시작합니다. 이렇게 하면 각 마스터 서비스의 mysql에 대한 모든 변경 사항이 자동으로 복사됩니다. 슬레이브 서버의 해당 데이터베이스로 업데이트됩니다.


db-app:/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf 시작 1-4

db-app1 :/ # /usr/local/mysq/bin/mysqld_multi --config-file=/etc/my.cnf 시작 1-4


************ ********


다섯째, 향후 테스트

다음으로 다중 마스터 및 단일 슬레이브 MySQL 서버 복제 솔루션을 만들고 싶습니다! 의견이 있으신가요? 구조는 다음과 같습니다.

마스터 서버인 Server A, Server B, 슬레이브 서버인 Server C가 있습니다. A와 B는 데이터베이스 이름이 다르다는 가정 하에 서로 다른 데이터베이스 애플리케이션을 실행하고 있습니다. 서버 C(이 세 대의 PC에서 하나의 mysql 서비스만 실행한다고 가정)에는 A 서버와 B 서버의 모든 Mysql 사용자와 동일한 액세스 권한이 포함되며 마스터/슬레이브 방식을 통해 하나의 MySQL 서비스 C 복사본 A와 B의 서비스로 통합됩니다. 데이터 베이스.


두 마스터 서버의 mysql을 하나의 슬레이브 서버로 병합하는 것과 거의 같습니다.


[관련 추천]

1.
Mysql 무료 동영상 튜토리얼


2. Mysql 서비스 2부


3.

Mysql 서비스를 시작하고 중지하는 방법을 배웁니다.

특수 처리에 대한 예제 튜토리얼 mysql의 sql 문

5. 다른 데이터베이스의 테이블을 삭제하는 SQL 문 작성 방법에 대한 자세한 설명

위 내용은 하나의 머신에서 여러 MySQL 서비스를 실행하는 방법을 가르쳐주세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.