우분투에서 소스 코드로 MySQL 8을 설치하는 방법
테스트 환경
$ lsb_release -d
Description: Ubuntu 22.04.3 LTS
참고 : 소스 코드를 사용하여 MySQL을 설치하는 것은 고급 사용자를 대상으로 합니다. 대부분의 경우 패키지 관리자를 통해 MySQL을 설치하는 것이 더 간편하고 안정적입니다.
MySQL 8.0.30 설치
1. 필수 의존성 설치
빌드 및 컴파일에 필요한 도구와 라이브러리를 설치합니다.
sudo apt update
sudo apt install -y gcc g++ make cmake pkg-config
sudo apt install -y dpkg-dev bison libudev-dev libssl-dev libncurses5-dev libncursesw5-dev
2. MySQL 사용자 생성
MySQL 서버를 실행할 사용자를 생성합니다.
groupadd -g 122 mysql
sudo useradd -r -s /bin/false -d /usr/local/mysql -c "MySQL Server" -g mysql -u 116 mysql
3. 소스 코드 다운로드
MySQL 소스 코드를 다운로드합니다.
- Download URL : https://downloads.mysql.com/archives/community/
mysql-boost-8.0.30.tar.gz 다운로드
cd /usr/local/src
wget https://cdn.mysql.com/archives/mysql-8.0/mysql-boost-8.0.30.tar.gz
4. 압축 해제
tar xfz mysql-boost-8.0.30.tar.gz
cd mysql-8.0.30
5. 빌드 디렉토리 생성
MySQL 소스에서 빌드를 위한 디렉토리를 생성합니다.
mkdir build
cd build
6. CMake를 사용하여 빌드 설정
CMake를 사용하여 빌드를 설정합니다. Boost 라이브러리를 사용하기 위해 -DWITH_BOOST 옵션을 추가합니다.
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/usr/local/mysql/etc \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/tmp/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DWITH_EXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BOOST=/usr/local/src/mysql-8.0.30/boost/boost_1_77_0 \
-DFORCE_INSOURCE_BUILD=1
- -DDOWNLOAD_BOOST=1 : Boost 라이브러리를 자동으로 다운로드합니다.
7. MySQL 컴파일
소스 코드를 컴파일합니다.
make -j$(nproc)
또는
make -j $(($(nproc) - 1))
8. MySQL 설치
컴파일이 완료되면 MySQL을 설치합니다.
sudo make install
또는
sudo make install -j $(($(nproc) - 1))
9. MySQL 버전 정보 확인
MySQL이 올바르게 설치되었는지 확인합니다.
/usr/local/mysql/bin/mysqld --version
$ /usr/local/mysql/bin/mysqld --version
/usr/local/mysql/bin/mysqld Ver 8.0.30 for Linux on x86_64 (Source distribution)
10. MySQL 초기 설정
MySQL 설치 후 초기 설정을 진행합니다.
sudo mkdir /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql/data
sudo mkdir /usr/local/mysql/tmp
sudo chown -R mysql:mysql /usr/local/mysql/tmp
MySQL 초기화 및 설정
- 데이터를 무작위로 생성된 루트 비밀번호와 함께 초기화합니다.
sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql
2024-11-04T03:48:32.906527Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.30) initializing of server in progress as process 99761
2024-11-04T03:48:32.914545Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in a future release. Please consider using UTF8MB4 in order to be unambiguous.
2024-11-04T03:48:32.914557Z 0 [Warning] [MY-013244] [Server] --collation-server: 'utf8mb3_general_ci' is a collation of the deprecated character set UTF8MB3. Please consider using UTF8MB4 with an appropriate collation instead.
2024-11-04T03:48:32.948688Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-11-04T03:48:33.462822Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-11-04T03:48:35.155747Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: dhQw8Whrog(*
11. MySQL 설정 파일 생성
sudo vim /usr/local/mysql/my.cnf
sudo tee /usr/local/mysql/my.cnf > /dev/null <<EOF
[mysqld]
user=mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/tmp/mysql.sock
pid-file=/usr/local/mysql/data/mysql.pid
port=3306
[client]
port=3306
socket=/usr/local/mysql/tmp/mysql.sock
EOF
12. MySQL 서비스 시작 및 자동 실행 설정
MySQL 서비스를 등록하여 부팅 시 자동으로 시작하도록 설정합니다.
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
sudo chmod +x /etc/init.d/mysql
sudo update-rc.d mysql defaults
MySQL 서비스를 시작합니다.
sudo systemctl start mysql
MySQL 서비스 상태 확인
sudo systemctl status mysql
13. MySQL 보안 설정
MySQL 보안 설정을 수행합니다.
sudo /usr/local/mysql/bin/mysql_secure_installation
---
$ sudo /usr/local/mysql/bin/mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: y
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) :
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.
All done!
---
14. MySQL 접속 및 설정 확인
기본 root 암호를 확인한 후 MySQL에 접속하여 필요한 추가 설정을 합니다.
sudo /usr/local/mysql/bin/mysql -u root -p
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.30 |
+-----------+
1 row in set (0.00 sec)
데이터베이스 생성
데이터베이스를 생성합니다.
CREATE DATABASE mydatabase;
테이블 생성
users라는 이름의 테이블을 생성할 수 있습니다.
USE mydatabase;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL
);
사용자 생성
MySQL 사용자 계정을 생성하고 생성한 데이터베이스에 대한 권한을 부여합니다.
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
MySQL 접속 및 확인
생성한 사용자 계정으로 MySQL에 접속합니다.
mysql -u myuser -p mydatabase
데이터 삽입 (INSERT)
users 테이블에 사용자 정보를 추가합니다.
INSERT INTO users (username, password) VALUES ('user1', 'password1');
INSERT INTO users (username, password) VALUES ('user2', 'password2');
데이터 조회 (SELECT)
users 테이블에서 모든 사용자 정보를 조회합니다.
SELECT * FROM users;
mysql> SELECT * FROM users;
+----+----------+-----------+
| id | username | password |
+----+----------+-----------+
| 1 | user1 | password1 |
| 2 | user2 | password2 |
+----+----------+-----------+
2 rows in set (0.00 sec)
특정 조건을 추가하여 조회할 수 있습니다.
SELECT * FROM users WHERE username = 'user1';
mysql> SELECT * FROM users WHERE username = 'user1';
+----+----------+-----------+
| id | username | password |
+----+----------+-----------+
| 1 | user1 | password1 |
+----+----------+-----------+
1 row in set (0.00 sec)
MySQL 8.0.30을 소스 코드로 설치할 수 있습니다. MySQL을 사용하려면 필요한 데이터베이스 및 사용자를 생성하고 설정 파일을 조정할 수 있습니다.
'리눅스' 카테고리의 다른 글
리눅스 소스 컴파일 중 "c++: fatal error: Killed signal terminated program cc1plus" 에러 (0) | 2022.10.24 |
---|---|
소스 컴파일 중 "reason: No space left on device" 오류 (0) | 2022.10.24 |
[draft] 우분투에서 스냅을 비활성화하고 삭제하는 방법 (0) | 2022.10.22 |
[kubernetes] kubectl config 명령 - 2 (0) | 2022.10.21 |
[kubernetes] kubectl get 명령 (0) | 2022.10.21 |