mariadb 빌드 시 외부 라이브러리 링크

원래부터 그랬는지 기억이 나지않지만 cmake기반의 빌드 시스템이 필수가 되었다. 기본 옵션으로는 TokuDB를 위해 jemalloc가 필요한데… TokuDB를 사용하지않으려면 “cmake -DWITH_JEMALLOC=no” 이렇게 실행하여 Makefile을 생성하면 되지만 임시로 이것저것 굴리기위한 일반 사용자 계정으로 돌릴 로컬 디비를 구측하는 중이라 사용해보고싶었다.

소스코드 및 빌드 경로: /opt/mariadb-local/src
PREFIX 경로: /opt/mariadb-local/usr

jemalloc는 /opt/mariadb-local/src에 다운로드하여 빌드 및 설치(./configure --prefix=/opt/mariadb-local/usr && make && make install)

mariadb는
cmake -DBUILD_CONFIG=mysql_release -DWITH_JEMALLOC=yes -DCMAKE_INSTALL_PREFIX=/opt/mariadb-local/usr -DCMAKE_REQUIRED_FLAGS="-I/opt/mariadb-local/usr/include" -DCMAKE_REQUIRED_LIBRARIES="-L/opt/mariadb-local/usr/lib"
명령으로 Makefile 생성. 환경변수는 이곳에서 참조하였다. 이제 빌드하면 DokuDB를 사용가능한 mariadb로 빌드가된다. 아마 더 필요한 라이브러리가 있다면 /opt/mariadb-local/usr에 필요한 라이브러리를 더 빌드하여 설치하면 될것으로 보인다.

추가

모듈을 링크할 때 jemalloc를 링크할 수 없는 오류가 발생하므로 –DCMAKE_MODULE_LINKER_FLAGS="-L/opt/mariadb-local/usr/lib" 옵션을 추가해야함.

기본테이블 생성을 위한 mysql_install_db 스크립트 실행은 아래와같이 실행 (소스코드는 mariadb-10.4.11 폴더이지만 mariadb-10.4.11-build 에서 빌드하였다.)
/opt/mariadb-local/usr $ ./scripts/mysql_install_db --builddir=/opt/mariadb-local/src/mariadb-10.4.11-build --basedir=/opt/mariadb-local/usr --datadir=/opt/mariadb-local/usr/data --defaults-file=/opt/mariadb-local/usr/my.cnf --user=$LOGNAME

첫 실행시엔 비밀번호가 설정되어있지않으므로 root 계정으로 mysql -h 127.0.0.1 -P 3307 -u root와같이 실행하여 암호를 바꿔야한다. (localhost로 hostname을 넘기면 포트번호가 무시되는것같다.) 만약 root권한을 가질 수 없다면 mysql_install_db에 --auth-root-authentication-method=normal 옵션을 추가하여 실행해야한다. (이미 설치되었다면 data 폴더의 내용을 지우고 실행해야된다.)

my.cnf 파일의 내용
[client]
port=3307
socket=/opt/mariadb-local/usr/mariadb.sock

[mysqld]
port=3307
socket=/opt/mariadb-local/usr/mariadb.sock
datadir=/opt/mariadb-local/usr/data
language=/opt/mariadb-local/usr/share/korean

로컬용 실행 스크립트
#!/bin/sh
./bin/mariadbd --defaults-file=/opt/mariadb-local/usr/my.cnf

로컬용 중지 스크립트
#!/bin/sh
./bin/mariadb-admin --defaults-file=/opt/mariadb-local/usr/my.cnf shutdown

실행결과
iruis@tun /opt/mariadb-local/usr $ ./run-mariadb.sh
2019-12-22  5:52:20 0 [Note] ./bin/mariadbd (mysqld 10.4.11-MariaDB) starting as process 14794 …
2019-12-22  5:52:20 0 [Note] InnoDB: Using Linux native AIO
2019-12-22  5:52:20 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2019-12-22  5:52:20 0 [Note] InnoDB: Uses event mutexes
2019-12-22  5:52:20 0 [Note] InnoDB: Compressed tables use zlib 1.2.11
2019-12-22  5:52:20 0 [Note] InnoDB: Number of pools: 1
2019-12-22  5:52:20 0 [Note] InnoDB: Using SSE2 crc32 instructions
2019-12-22  5:52:20 0 [Note] mariadbd: O_TMPFILE is not supported on /tmp (disabling future attempts)
2019-12-22  5:52:20 0 [Note] InnoDB: Initializing buffer pool, total size = 128M, instances = 1, chunk size = 128M
2019-12-22  5:52:20 0 [Note] InnoDB: Completed initialization of buffer pool
2019-12-22  5:52:20 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2019-12-22  5:52:20 0 [Note] InnoDB: 128 out of 128 rollback segments are active.
2019-12-22  5:52:20 0 [Note] InnoDB: Creating shared tablespace for temporary tables
2019-12-22  5:52:20 0 [Note] InnoDB: Setting file ‘./ibtmp1’ size to 12 MB. Physically writing the file full; Please wait …
2019-12-22  5:52:20 0 [Note] InnoDB: File ‘./ibtmp1’ size is now 12 MB.
2019-12-22  5:52:20 0 [Note] InnoDB: Waiting for purge to start
2019-12-22  5:52:20 0 [Note] InnoDB: 10.4.11 started; log sequence number 60736; transaction id 23
2019-12-22  5:52:20 0 [Note] InnoDB: Loading buffer pool(s) from /opt/mariadb-local/usr/data/ib_buffer_pool
2019-12-22  5:52:20 0 [Note] Plugin ‘FEEDBACK’ is disabled.
2019-12-22  5:52:20 0 [Note] InnoDB: Buffer pool(s) load completed at 191222  5:52:20
2019-12-22  5:52:20 0 [Note] Server socket created on IP: ‘::’.
2019-12-22  5:52:20 0 [Note] Reading of all Master_info entries succeeded
2019-12-22  5:52:20 0 [Note] Added new Master_info ” to hash table
2019-12-22  5:52:20 0 [Note] ./bin/mariadbd: ready for connections.
Version: ‘10.4.11-MariaDB’  socket: ‘/opt/mariadb-local/usr/mariadb.sock’  port: 3307  MariaDB Server

최근 버전에서는 user 테이블의 암호를 update 쿼리로 변경이 불가능하게 되었다. 무조건 root 쉘에서 /opt/mariadb-local/usr/bin/mariadb-secure-installation --defaults-file=my.cnf 와같이 실행하여 별도의 설치가 필요한데… root권한을 가지지 못한다면 datadir에 해당되는 폴더를 제거한 후 mysql_install_db 스크립트에 --auth-root-authentication-method=normal 옵션을 붙여서 설치해야 됨.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

*
*

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.