db local test / 테스트 / 테스트 방법 / 구성방법 / 로컬에서 테스트 방법
dbdeployer
dbdeployer 를 이용해서 하나의 host 에서 여러 port 를 이용해서 mysql 를 여러개 띄울 수 있다. 이것을 이용해서 여러 topology 를 테스트 해 볼 수 있다. 이 dbdeployer 의 전신이 MySQL-Sandbox 이다.
환경
- OS : ubutu 20.04.1 64bit (참고로 dbdeployer 는 windows 용 binary 를 제공하지 않는다.)
dbdeployer init
시작, dbdeployer init
을 하면 directory 들도 만들고, dbdeployer 를 $PATH 에 copy 해 놓게 된다. 그리고 일단 기본적으로 mysql 을 download 해서 SANDBOX_DIRECTORY 에 넣게 된다.
- ($SANDBOX_BINARY) was created
- ($SANDBOX_HOME) was created
- dbdeployer downloads get mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz
- dbdeployer unpack mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz
- dbdeployer defaults enable-bash-completion --run-it --remote
- Download of file dbdeployer_completion.sh was successful
na@na-VirtualBox:~/a$ dbdeployer init
SANDBOX_BINARY /home/na/opt/mysql
SANDBOX_HOME /home/na/sandboxes
--------------------------------------------------------------------------------
Directory /home/na/opt/mysql ($SANDBOX_BINARY) was created
This directory is the destination for expanded tarballs
--------------------------------------------------------------------------------
Directory /home/na/sandboxes ($SANDBOX_HOME) was created
This directory is the destination for deployed sandboxes
--------------------------------------------------------------------------------
# dbdeployer downloads get mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz
.... 48 MB
--------------------------------------------------------------------------------
# dbdeployer unpack mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz
Unpacking tarball mysql-8.0.21-linux-glibc2.17-x86_64-minimal.tar.xz to $HOME/opt/mysql/8.0.21
Renaming directory /home/na/opt/mysql/mysql-8.0.21-linux-glibc2.17-x86_64-minimal to /home/na/opt/mysql/8.0.21
--------------------------------------------------------------------------------
dbdeployer versions
Basedir: /home/na/opt/mysql
8.0.21
--------------------------------------------------------------------------------
# dbdeployer defaults enable-bash-completion --run-it --remote
83 kB
Download of file dbdeployer_completion.sh was successful
# completion file: dbdeployer_completion.sh
# Running: sudo cp dbdeployer_completion.sh /etc/bash_completion.d
# File copied to /etc/bash_completion.d/dbdeployer_completion.sh
# Run the command 'source /etc/bash_completion'
main
dpdeployer deploy ...
로 시작하는 명령어들이 main 이다. 이 명령어들은 sandbox-binary directory(보통 $HOME/opt/mysql
로 만들어진다.) 에 있는 db binary 를 이용한다.
dpdeployer deploy single
-
dpdeployer deploy replication
: replication 관계로 여러 node 를 만든다. -
dpdeployer deploy multiple
: replication 관계가 없는 같은 버전의 sandbox 여러개들을 만든다. - 참고로
-h
를 이용하면 자세한 설명을 확인할 수 있다. (ex:dpdeployer deploy multiple -h
)
unpack
command 를 이용해서 미리 mysql tarball 을 풀어놓으면 된다.(참고로 binary tarball 이다. source tarball 이 아니라.) 만약 다른 db(mariadb) 를 사용하고 싶다면 다른 tarball 을 풀어놓으면 된다. unpack
명령어를 이용하면 되고, unpack 을 하면 /home/na/opt/mysql
에 설치(?) 된다. 대략 저장용량이 3GB 정도 필요하다.
$ wget https://downloads.mariadb.org/interstitial/mariadb-10.4.15/bintar-linux-x86_64/mariadb-10.4.15-linux-x86_64.tar.gz
$ dbdeployer unpack mariadb-10.4.15.tar.gz
mariadb source tarball 은 아래 경로를 가면 된다.
libaio, libnuma
libaio, libnuma 가 필요하다. 설치를 해 놓자.
sudo apt install libaio-dev
sudo apt install libnuma-dev
sudo apt install libtinfo5
deploy replication, deploy multiple, deploy single
deploy replication 은 replication 관계에 있는 node 들을 만들어준다. 다른 방식(multiple, single)도 비슷하게 실행할 수 있다.
10.4.15 version 으로 master-slave 를 만드는 것은 아래처럼 하면 된다. --topology
가 없으면 기본적으로 master-slave
로 만들어준다. (참고: dbdeployer > Replication topologies)
아래처럼 remote-access 를 설정하면, 기본적으로 만들어지는 계정의 값이 바뀐다.(user@%
)
참고로, root 의 password 는 기본적으로 msandbox 로 set 된다.
dbdeployer deploy replication 10.4.15 \
--topology=master-slave \
--nodes=3 \
--bind-address=0.0.0.0 \
--remote-access='%'
아래처럼 .sql 을 사용하면, deploy 할 때 .sql 을 실행 한다.
$ dbdeployer deploy --topology=master-slave replication 10.4.15 \
--bind-address=0.0.0.0 \
--remote-access='%' \
--post-grants-sql-file=$PWD/run.sql
-- run.sql CREATE DATABASE IF NOT EXISTS my_test; CREATE USER myuser IDENTIFIED BY 'mypassord'; GRANT ALL PRIVILEGES ON my_test.* TO myuser; GRANT SELECT ON mysql.user TO myuser;
na@na-VirtualBox:~/a$ dbdeployer deploy --topology=master-slave replication 10.4.15
Installing and starting master
. sandbox server started
Installing and starting slave1
. sandbox server started
Installing and starting slave2
. sandbox server started
$HOME/sandboxes/rsandbox_10_4_15/initialize_slaves
initializing slave 1
initializing slave 2
Replication directory installed in $HOME/sandboxes/rsandbox_10_4_15
run 'dbdeployer usage multiple' for basic instructions'
그러면 아래처럼 3개의 process 가 떠있는 것을 확인할 수 있다.
user_na@user_na-VirtualBox:~/a$ ps aux | grep my
user_na 1930 0.0 0.1 2608 1684 pts/0 S 13:50 0:00 /bin/sh bin/mysqld_safe --defaults-file=/home/user_na/sandboxes/rsandbox_10_4_15/master/my.sandbox.cnf
user_na 2042 0.0 8.2 1235432 82544 pts/0 Sl 13:50 0:00 /home/user_na/opt/mysql/10.4.15/bin/mysqld --defaults-file=/home/user_na/sandboxes/rsandbox_10_4_15/master/my.sandbox.cnf --basedir=/home/user_na/opt/mysql/10.4.15 --datadir=/home/user_na/sandboxes/rsandbox_10_4_15/master/data --plugin-dir=/home/user_na/opt/mysql/10.4.15/lib/plugin --log-error=/home/user_na/sandboxes/rsandbox_10_4_15/master/data/msandbox.err --pid-file=/home/user_na/sandboxes/rsandbox_10_4_15/master/data/mysql_sandbox22916.pid --socket=/tmp/mysql_sandbox22916.sock --port=22916
user_na 2164 0.0 0.1 2608 1828 pts/0 S 13:50 0:00 /bin/sh bin/mysqld_safe --defaults-file=/home/user_na/sandboxes/rsandbox_10_4_15/node1/my.sandbox.cnf
user_na 2276 0.1 8.3 1235732 83584 pts/0 Sl 13:50 0:00 /home/user_na/opt/mysql/10.4.15/bin/mysqld --defaults-file=/home/user_na/sandboxes/rsandbox_10_4_15/node1/my.sandbox.cnf --basedir=/home/user_na/opt/mysql/10.4.15 --datadir=/home/user_na/sandboxes/rsandbox_10_4_15/node1/data --plugin-dir=/home/user_na/opt/mysql/10.4.15/lib/plugin --log-error=/home/user_na/sandboxes/rsandbox_10_4_15/node1/data/msandbox.err --pid-file=/home/user_na/sandboxes/rsandbox_10_4_15/node1/data/mysql_sandbox22917.pid --socket=/tmp/mysql_sandbox22917.sock --port=22917
user_na 2384 0.0 0.1 2608 1840 pts/0 S 13:50 0:00 /bin/sh bin/mysqld_safe --defaults-file=/home/user_na/sandboxes/rsandbox_10_4_15/node2/my.sandbox.cnf
user_na 2496 0.1 8.3 1235732 83444 pts/0 Sl 13:50 0:00 /home/user_na/opt/mysql/10.4.15/bin/mysqld --defaults-file=/home/user_na/sandboxes/rsandbox_10_4_15/node2/my.sandbox.cnf --basedir=/home/user_na/opt/mysql/10.4.15 --datadir=/home/user_na/sandboxes/rsandbox_10_4_15/node2/data --plugin-dir=/home/user_na/opt/mysql/10.4.15/lib/plugin --log-error=/home/user_na/sandboxes/rsandbox_10_4_15/node2/data/msandbox.err --pid-file=/home/user_na/sandboxes/rsandbox_10_4_15/node2/data/mysql_sandbox22918.pid --socket=/tmp/mysql_sandbox22918.sock --port=22918
user_na 2557 0.0 0.0 18964 724 pts/0 S+ 13:52 0:00 grep --color=auto my
client 접근
/home/namh/opt/mysql/10.4.15/bin/mysql -u msandbox --host=127.0.0.1 --port=22918 -p
sandbox 삭제
dbdeployer sandboxes
dbdeployer delete rsandbox_10_4_15
namh@namh-VirtualBox:~/a$ dbdeployer sandboxes
rsandbox_10_4_15 : master-slave 10.4.15 [22916 22917 22918 ]
namh@namh-VirtualBox:~/a$ dbdeployer delete rsandbox_10_4_15
List of deployed sandboxes:
/home/namh/sandboxes/rsandbox_10_4_15
Running /home/namh/sandboxes/rsandbox_10_4_15/send_kill_all destroy
# executing 'send_kill' on /home/namh/sandboxes/rsandbox_10_4_15
executing "send_kill" on slave 1
Terminating the server immediately --- kill -9 5502
executing "send_kill" on slave 2
Terminating the server immediately --- kill -9 5723
executing "send_kill" on master
Terminating the server immediately --- kill -9 5267
Running rm -rf /home/namh/sandboxes/rsandbox_10_4_15
Directory /home/namh/sandboxes/rsandbox_10_4_15 deleted