1. MySQL 사용자 생성
[root@DB1]# groupadd mysql
[root@DB1]# useradd -M -c "MySQL" -d /data/ -g mysql -s /sbin/nologin mysql
2. 바이너리 파일 올려두기 / 압축 해제
[root@DB1]# mkdir -p /data/mysql
[root@DB1]# tar zxvf mariadb-10.6.4-linux-systemd-x86_64.tar.gz
[root@DB1]# mv mariadb-10.6.4-linux-systemd-x86_64 mysql
3. my.cnf 설정
[root@DB1]# vi /etc/my.cnf
[client]
port = 3306 # mysql 서버가 수신 대기할 포트
socket = /tmp/mysql.sock # 서버 소켓 파일 위치
[mysqld]
port = 3306
socket = /tmp/mysql.sock
datadir = /data/mysql/data # 데이터베이스 파일이 저장될 디렉토리
basedir = /usr/local/mysql # mysql 설치 기본 경로
#character-set-client-handshake=FALSE
character-set-server = utf8mb4 # 서버의 기본 문자 집합
collation_server = utf8mb4_general_ci # 서버의 기본 정렬 규칙
init_connect="SET collation_connection = utf8mb4_general_ci" # 클라이언트가 연결될때마다 실행될 명령
init_connect="SET NAMES utf8mb4 COLLATE utf8mb4_general_ci" # 클라이언트 세션에 대한 문자 집합 설정
### SQL mode
sql-mode= # SQL 모드를 설정하는 옵션. 비어 있으면 기본 설정
transaction-isolation = READ-COMMITTED # 트랜잭션 격리 수준을 설정
skip-character-set-client-handshake # 서버 자체의 character-set-server 및 collation-server 설정을 강제로 적용
#collation_connection = @@collation_database
# store procedure privileges
log_bin_trust_function_creators=1
back_log = 50 # 대기 상태의 연결 큐에 대한 백로그 수
max_connections = 1024 # 동시에 허용되는 최대 클라이언트 연결 수
max_connect_errors = 10 # 클라이언트가 연결을 실패할 수 있는 최대 횟수
table_open_cache = 2048 # 열린 테이블의 수를 캐시하는 데 사용
max_allowed_packet = 1024M # 한 패킷에 허용되는 최대 데이터 크기
binlog_cache_size = 1M # 개별 트랜잭션의 데이터를 캐싱하는 데 사용되는 메모리 버퍼의 크기를 지정
max_heap_table_size = 64M # 메모리 테이블이 사용할 수 있는 최대 메모리 양을 지정
read_buffer_size = 2M # 디스크에서 데이터를 읽을 때 사용되는 버퍼의 크기
read_rnd_buffer_size = 16M # MyISAM 테이블에서 정렬된 결과를 읽을 때 사용되는 버퍼의 크기
sort_buffer_size = 8M # ORDER BY나 GROUP BY 구문을 처리할 때 사용되는 메모리 버퍼의 크기
join_buffer_size = 8M # 인덱스를 사용하지 않는 JOIN 연산을 수행할 때 사용되는 버퍼의 크기
thread_cache_size = 8 # 생성된 쓰레드를 캐싱하는 데 사용되며, 새로운 클라이언트 연결을 빠르게 처리할 수 있도록 도움
ft_min_word_len = 4 # FULLTEXT 인덱스를 사용할 때 인덱싱되는 최소 단어 길이를 지정
event_scheduler = ON # MySQL의 이벤트 스케줄러를 활성
#default-storage-engine = innoDB
tmp_table_size = 64M
##myisam
#key_buffer_size = 32M
#bulk_insert_buffer_size = 64M
#myisam_sort_buffer_size = 128M
#myisam_max_sort_file_size = 10G
#myisam_repair_threads = 1
#myisam_recover
#innodb_additional_mem_pool_size = 16M # mysql5.6 이상에서 사라짐
innodb_buffer_pool_size = 16G # InnoDB 테이블, 인덱스, 데이터 등을 메모리에 캐싱하기 위해 사용되는 버퍼 풀의 크기를 지정 (시스템 메모리의 70% 설정)
innodb_data_file_path = ibdata1:10M:autoextend # 데이터 저장 요구가 증가함에 따라 파일이 자동으로 확장되어 데이터베이스 운영에 필요한 유연성을 제공
innodb_write_io_threads = 8
innodb_read_io_threads = 8 # I/O 작업을 병렬로 처리하여 성능을 향상
innodb_thread_concurrency = 8 # 시스템 자원과 워크로드에 따라 최적의 스레드 수를 설정하여 성능을 조절
innodb_flush_log_at_trx_commit = 1 # 데이터의 안정성을 최대화하며, 데이터베이스 장애 발생 시 데이터 손실 없이 복구가 가능
innodb_log_buffer_size = 2G
innodb_log_file_size = 512MB # InnoDB 로그 파일의 크기
#innodb_locks_unsafe_for_binlog = 1
innodb_file_per_table = 1
lower_case_table_names = 1
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
prompt = "mysql [\\d] > "
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192
4. 데이터베이스 초기화
mysql_install_db는 MySQL 바이너리 설치 후 데이터베이스를 초기화하고 시스템 테이블을 생성하는 스크립트입니다. 이 스크립트는 MySQL 데이터베이스 서버를 처음 설치하거나 업그레이드할 때 사용됩니다.
mysql_install_db를 실행하는 이유는 다음과 같습니다:
데이터베이스 초기화: MySQL 데이터베이스 서버를 처음 설치하면 데이터베이스 파일이나 디렉터리가 생성되지 않습니다. mysql_install_db를 실행하면 MySQL 데이터베이스 서버를 위한 초기 데이터베이스를 생성하고 필요한 시스템 테이블을 포함하여 초기 데이터베이스를 초기화합니다.
권한 및 소유권 설정: mysql_install_db는 데이터베이스 디렉터리와 파일에 대한 적절한 권한 및 소유권을 설정합니다. 이를 통해 MySQL 서버가 데이터베이스에 쓰기 및 읽기 권한을 가지고 있는지 확인할 수 있습니다.
사용자 및 그룹 설정: --user=mysql 옵션은 MySQL 프로세스를 시작하는 데 사용할 사용자를 지정합니다. 일반적으로 MySQL은 mysql 사용자로 실행됩니다. mysql_install_db는 데이터베이스 디렉터리 및 파일을 mysql 사용자의 소유권으로 생성하여 보안을 강화합니다.
따라서 mysql_install_db를 실행함으로써 MySQL 데이터베이스 서버를 초기화하고 사용할 준비가 된 상태로 만들 수 있습니다.
[root@DB1 mysql]# ./scripts/mysql_install_db --user=mysql
4. 심볼릭 링크 걸어서 사용
[root@DB1 mysql]# ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
[root@DB1 mysql]# ln -s /usr/local/mysql/bin/mysqldump /usr/sbin/mysqldump
[root@DB1 mysql]# ln -s /usr/local/mysql/bin/mysql_config /usr/sbin/mysql_config
[root@DB1 mysql]# ln -s /usr/local/mysql/bin/mysqladmin /usr/sbin/mysqladmin
5. DB 백그라운드로 실행
[root@DB1 mysql]# /usr/local/mysql/bin/mysqld_safe --user=mysql &
DB 시작 시 에러 발생 해결
[root@DB1 mysql]# ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5
[root@DB1 mysql]# ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5