4 minute read

MySQL 수동 설치 해보자


설치방법
Installing MYSQL Using a Standard Source Distribution 를 참고하세요.

CMake User Guide 를 참고하세요.


사전준비

  • boost 설치
wget https://boostorg.jfrog.io/artifactory/main/release/1.77.0/source/boost_1_77_0.tar.bz2
tar -xvjf 파일이름.boost_1_77_0.tar.bz2
tar -xvjf boost_1_77_0.tar.bz2

정보
-j : 파일이 .bz2 형식이라는 것을 나타냅니다.

cmake , make, build-essential, openssl, libboost-all-dev, libncurses6-dev, libncursesw6-dev 필요

아래 명령어를 통해 패키지가 존재하는지 확인
dpkg -l | grep [이름]

요구사항 패키지 확인

cmake : apt-get install cmake

make : apt-get install make (존재)

Linux: GCC 7.1 or Clang 5 : sudo apt-get install build-essential (gcc, g++ 존재)

SSL library : sudo apt-get install openssl (존재)

Boost C++ libraries : sudo apt-get install libboost-all-dev

ncurses library : sudo apt-get install libncurses5-dev libncursesw5-dev (존재)

Perl : apt-get install perl (존재)
  • cmake 설치

cmake만 없기 때문에 이것만 설치
Boost는 위에서 수동 설치 했음

cmake : apt-get install cmake

MySQL설치

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.33.tar.gz
gzip -d mysql-8.0.33.tar.gz
tar xvf mysql-8.0.33.tar
cd mysql-8.0.33
mkdir build
cd build
cmake \
.. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DSYSCONFDIR=/etc \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DDOWNLOAD_BOOST=1 \
-DWITH_SSL=system \
-DWITH_BOOST=/home/song_ubuntu_22_04/boost_1_77_0

CMake MySQL 옵션 정보

-DCMAKE_INSTALL_PREFIX=path: MySQL이 설치될 경로를 지정합니다.

-DMYSQL_DATADIR=path: MySQL 데이터 디렉토리의 경로를 지정합니다.

-DSYSCONFDIR=path: MySQL 설정 파일의 경로를 지정합니다.   

-DMYSQL_UNIX_ADDR=path: MySQL 서버가 실행 중인 Unix 소켓 파일의 경로를 지정합니다.   

-DMYSQL_TCP_PORT=<port_number>: MySQL 서버와 통신하기 위해 사용할 TCP 포트를 설정하는 데 사용됩니다.   

-DDEFAULT_CHARSET=<문자집합>: CMake 프로젝트에서 사용할 기본 문자 인코딩을 설정하는 데 사용됩니다. 

-DDEFAULT_COLLATION=<문자정렬>: 데이터베이스에서 문자열 비교를 수행할 때 사용되는 기본 정렬 규칙을 지정합니다.   

-DWITH_EXTRA_CHARSETS=<문자집합>: MySQL 데이터베이스 서버를 빌드할 때 추가 문자 집합을 사용할 수 있도록 합니다.   

-DOWNLOAD_BOOST=1: CMake가 Boost 라이브러리를 다운로드하도록 지시하는 옵션입니다. 

-DWITH_BOOST=path: CMake가 Boost 라이브러리를 빌드할 때 해당 라이브러리를 사용할 수 있도록 지정할 수 있습니다

-DWITH_INNOBASE_STORAGE_ENGINE=1: InnoDB 스토리지 엔진을 빌드합니다.

-DWITH_MYISAM_STORAGE_ENGINE=1: MyISAM 스토리지 엔진을 빌드합니다.

-DWITH_ARCHIVE_STORAGE_ENGINE=1: Archive 스토리지 엔진을 빌드합니다.

-DWITH_BLACKHOLE_STORAGE_ENGINE=1: Blackhole 스토리지 엔진을 빌드합니다.

-DWITH_PARTITION_STORAGE_ENGINE=1: Partition 스토리지 엔진을 빌드합니다.

-DWITH_SSL=system: 시스템 SSL 라이브러리를 사용합니다.

-DWITH_ZLIB=bundled: MySQL에 내장된 zlib 라이브러리를 사용합니다.

-DWITH_LIBWRAP=0: TCP Wrappers를 사용하지 않습니다.

-DENABLED_LOCAL_INFILE=1: 로컬 파일의 로딩을 허용합니다.

Unix 소켓 파일 정보

Unix 소켓 파일은 Unix 계열 운영체제에서 사용되는 통신 방식 중 하나입니다. 이 방식은 프로세스간 통신(IPC)을 위해 사용됩니다.    
소켓 파일은 파일 시스템에 존재하지만, 일반 파일과는 다릅니다.    
일반 파일은 파일 내용을 읽고 쓸 수 있지만, 소켓 파일은 소켓을 통해 데이터를 주고 받을 수 있습니다.    

소켓 파일은 서버와 클라이언트 간의 통신에 사용됩니다.    
서버는 소켓 파일을 생성하고, 클라이언트는 이 파일을 통해 서버에 접속합니다.    
이를 통해 두 프로세스 간의 데이터 전송이 가능해집니다.   
make
make install

MYSQL 사용자 추가

사용자 그룹 및 사용자 추가

groupadd mysql
useradd -r -g mysql -s /bin/false mysql

useradd [OPTIONS] USERNAME

정보
-r : system account
-g : 그룹 지정
-s: user의 로그인 shell
/bin/false : 로 해당 user로 로그인하는 것을 막는다.

생성된 사용자 확인

cat /etc/passwd 

MySQL 설정 및 실행

cd /usr/local/mysql
mkdir mysql-files
chown mysql:mysql mysql-files
chmod 750 mysql-files

MySQL 데이터베이스 서버를 초기화

bin/mysqld --initialize --user=mysql

정보
–initialize : 데이터베이스 디렉토리를 초기화
–user=mysql : MySQL 서버 프로세스가 mysql 사용자로 실행되도록 지정

bin/mysql_ssl_rsa_setup

정보
MySQL 서버와 클라이언트 간의 통신이 암호화되고 보안이 강화됩니다.

MySQL 서버 실행
sudo /etc/init.d/mysqld start
sudo /etc/init.d/mysqld status
sudo /etc/init.d/mysqld restart


MYSQL 서버 실행 중인지 확인

ps -ef | grep mysqld

MYSQL 서버 실행이 안될때
/usr/local/mysql/data 경로에서 *****.err 파일을 봐보자.
이곳에서 로그가 mysqld.sock을 읽다가 중단 되는 느낌이였음.
MYSQL이 실행 될때 생성 되는 mysql.sock이 현재 봐라보고 있는 곳과 다른곳에서 생성 되고 있었음.

CMake 설정에 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock 로 했기 때문에
mysql.sock이 /usr/local/mysql 에 생성이 됨. (못찾아서 헤맸음 😂)

MYSQL 설정파일 /etc/mysql/conf.d/mysql.cnf 에서 socket=/usr/local/mysql/mysql.sock 로 socket 경로를 바꿔주자

그럼 이제 잘 실행이 될거다 👍


사용자 패스워드 변경
mysql -u root -p 로 로그인
처음 설치 했을 때 임시 비밀번호를 이용한다.

alter user 'root'@'localhost' identified by '원하는 비밀번호'; 로 비밀번호 변경


부팅 시 자동으로 실행 설정

cp support-files/mysql.server /etc/init.d/mysql.server

정보
해당 명령어는 support-files 디렉토리 안에 위치한 mysql.server 파일을 /etc/init.d/ 디렉토리로 복사하는 것을 의미합니다.
이 명령어는 MySQL 데이터베이스 서버를 설치한 후에 서버를 실행하기 위해 사용됩니다.
/etc/init.d/ 디렉토리에 위치한 스크립트 파일은 시스템 부팅 시 자동으로 실행되는데,
이 경우 /etc/init.d/mysql.server 파일은 MySQL 서버를 자동으로 시작하거나 중지하는 데 사용됩니다.


php mysql 연동

sudo apt-get install php-mysql

php.ini 파일에 아래 2줄의 주석을 풀어줍니다.

extension=mysqli
extension=pdo_mysql

그리고 Apache 서버 재시작

apachectl restart

정보
extension=pdo_mysql는 PHP Data Objects(PDO) 인터페이스를 사용하여 MySQL 데이터베이스와 상호 작용하는 데 사용됩니다.
이 확장(extension)은 일반적으로 MySQL 데이터베이스를 사용하는 PHP 애플리케이션에서 데이터베이스 연결과 쿼리 실행에 사용됩니다.
PDO는 여러 종류의 데이터베이스에 대한 일관된 인터페이스를 제공하기 때문에, MySQL 외에도 다른 데이터베이스 시스템과 상호 작용하는 데 사용할 수 있습니다.
`
반면에 extension=mysqli는 MySQL 데이터베이스와 직접 상호 작용하기 위한 MySQLi 확장(extension)입니다.
이 확장(extension)은 이전 버전의 MySQL 확장(extension)보다 개선된 기능을 제공하며, 객체 지향 프로그래밍 방식으로 작성되었습니다.
`
이 확장(extension)은 MySQL 데이터베이스에 대한 더 나은 보안 및 성능을 제공합니다.
`
따라서, extension=pdo_mysql은 일반적인 데이터베이스 인터페이스를 제공하고,
extension=mysqli는 MySQL 데이터베이스와 직접 상호 작용하기 위한 인터페이스를 제공합니다.
어떤 확장(extension)을 사용할지는 애플리케이션의 요구 사항과 개발자의 선호도에 따라 다를 수 있습니다.

PHP 연동이 잘 되는지 확인해 봅시다.

<?php
    echo "MySQL 연결 테스트<br>";

    error_reporting(E_ALL);
    
    ini_set("display_errors", 1);

    if (!function_exists('mysqli_init') && !extension_loaded('mysqli')) {
        echo 'MySQLi is not installed!';
    } else {
        echo 'MySQLi is installed!';
    }


    $conn = mysqli_connect('127.0.0.1', 'root', '[비밀번호]');
    if (!$conn) {
        die('Could not connect to MySQL: ' . mysqli_connect_error());
    }
    echo 'Connected successfully';
    mysqli_close($conn);
?>

를 이용해서 확인!😎


Updated:

Leave a comment