MySQL을 학습하는 과정에서 다양한 매개변수의 효과를 테스트하는 경우가 많습니다. 이때 마스터-슬레이브 인스턴스라도 MySQL 인스턴스를 빠르게 구축해야 합니다.
다음 시나리오를 고려하십시오.
예를 들어 --single-transaction 매개변수가 지정된 경우 myisam 테이블에 대한 mysqldump의 영향을 테스트하고 싶습니다.
원래는 미리 만들어진 테스트 환경에서 하려고 했는데, 테스트 환경에 데이터가 너무 많아서 mysqldump를 실행해서 생성된 SQL 파일을 완벽하게 준비했는데, 기반으로는 검색이 어렵네요. 테이블.
이번에는 특히 테스트를 위한 깔끔한 예제 세트를 갖고 싶습니다.
특히나 빨리 역량을 키워야 하는 순간이잖아요. 많은 아이들이 '대본으로 하면 안 되지?'라고 묻습니다. 도커를 사용하는 이유는 무엇입니까?
개인적인 느낌: 스크립트가 너무 무겁고 사용자 생성 등 추가 작업이 많이 필요하고 데이터베이스 초기화 프로세스가 비교적 길며 MySQL 시작 프로세스가 필요합니다. 빨리 파괴하세요.
그리고 이것이 도커의 강점입니다.
다음은 docker를 사용하여 인스턴스를 시작하는 데 걸리는 시간으로, 스크립트를 사용하면 결코 빠르지 않습니다.
# time docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v //lib/mysql/slave://lib/mysql -p3307:-e MYSQL_ROOT_PASSWORD= -d mysql:
그래서 docker 기반으로 스크립트를 작성했는데, 약 30초 만에 새로운 MySQL 마스터-슬레이브 복제 환경을 생성할 수 있습니다
rree스크립트 자체에는 설명할 것이 별로 없습니다. 마스터-슬레이브 컨테이너가 시작된 후에도 여전히 일반적인 마스터-슬레이브 복제 설정 프로세스를 따릅니다.
주로 컨테이너 생성과 관련된 옵션에 대해 이야기합니다.
#!/bin/=/var/lib/mysql/=/var/lib/mysql/ - - - ---name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD= -d mysql:.--name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v $SLAVE_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD= -. -it master mysql -S /var/lib/mysql/mysql.sock -e LAVE ON *.* TO @;=`docker exec -it master mysql -S /var/lib/mysql/mysql.sock -e =` | =` | =-it slave mysql -S /var/lib/mysql/mysql.sock -e eplrepldocker exec -it slave mysql -S /var/lib/mysql/mysql.sock -e /etc/ [ $? -eq ]; >> /etc/ >> /etc/ >> /etc//etc/
-v /etc/master.cnf:/etc/mysql/my.cnf: 로컬 구성 파일을 컨테이너 구성 파일에 매핑하여 수정할 수 있습니다. 컨테이너 구성 파일을 수정하는 효과를 얻으려면 로컬 구성 파일을 사용하세요.
-v $MASTER_DIR:/var/lib/mysql: 로컬 디렉터리를 컨테이너의 데이터 디렉터리에 매핑합니다. 이렇게 하면 데이터 디렉터리의 내용을 쉽게 볼 수 있습니다. 그렇지 않으면 /var에 저장됩니다. /lib/docker는 기본적으로 /volumes 디렉터리인데 보기가 정말 불편합니다.
--net=host: 호스트의 네트워크를 공유하면 컨테이너 간 통신의 복잡성이 크게 줄어듭니다.
참고
스크립트가 처음 시작되면 이전 컨테이너가 삭제됩니다. 여기에는 두 단계가 포함됩니다. 1. docker 명령
을 통해 컨테이너를 삭제합니다. 2. 운영 체제 명령을 통해 이전 컨테이너의 데이터 디렉터리를 삭제합니다.
삭제하지 않으면 다시 다음 명령어를 통해 컨테이너를 생성하면 이전 데이터 디렉토리가 지워지지 않고 바로 로드되는데 이는 mysqld 이전에 새 인스턴스를 시작하는 것과 같습니다. 프로세스가 시작되었습니다.
docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
인스턴스를 시작한 후 인스턴스를 다시 시작하는 작업을 수행했습니다. 테스트 중에 docker exec -it master bash와 같은 작업을 수행하면 컨테이너가 다운되는 것을 발견했기 때문입니다(구체적인 이유). 아직 분석되지 않았지만 인스턴스를 다시 시작하면 문제가 없습니다.
docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql --net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
단축키 설정mysql: mysql 클라이언트, 이를 통해 다른 클라이언트에 연결할 수 있습니다. 호스트 시스템의 클라이언트 MySQL 서버.
master: master를 실행하여 로컬 마스터 인스턴스에 로그인하므로 호스트 이름과 포트를 지정할 필요가 없습니다.
salve: 슬레이브를 실행하여 로컬 슬레이브 인스턴스에 로그인합니다.
이상은 docker를 사용하여 MySQL 마스터-슬레이브 복제 환경을 빠르게 구축하는 방법에 대한 자세한 소개입니다. 더 많은 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!