2024. 2. 27. 23:17ㆍMySQL/Class
# mysql의 basedir 을 교체하여 업그레이드 하는 방법이 있습니다. 이러한 방법을 In-place upgrade 라고 합니다.
저는 현재 버전이 8.0.33 이라, 상위 버전이 얼마 있지 않아, 8.0.35 버전으로 업그레이드를 진행하도록 하여, In-place upgrade가 무엇이지를 알아 보겠습니다.
# 만약 5.5 버전에서 8.0으로 업그레이드를 해야 한다면, 5.5->5.6->5.7->8.0 방식으로 안정성을 위해 한 단계씩 업그레이드를 해야한다고 합니다. 그러나 5.5 에서 5.7로 바로 넘어갈 수도 있다는 것도 참고해 두시면 좋겠죠.
1. 현재 버전
2. 다운로드
- OS에 맞는 필요한 버전을 다운 받아주세요. 저는 Mac 버전인 aarc;h64 버전을 다운 받았습니다.
https://downloads.mysql.com/archives/community/
3. 압축풀기 & 파일 권한
- 압축을 풀어보니 3개의 파일의 또다른 압축 파일이 존재하네요.
- 여기서 우리가 필요한 것은 mysql-8.0.35-linux-glibc2.28-aarch64.tar.xz 입니다.
# mysql-8.0.35-linux-glibc2.28-aarch64.tar.xz 압축 풀기
tar -xvf mysql-8.0.35-linux-glibc2.28-aarch64.tar.xz -C /mysql/local/.
# 권한 변경
[root@test03 local]# cd /mysql/local/
[root@test03 local]# ls -ltr
합계 0
drwxr-xr-x. 10 mysql mysql 141 12월 25 23:36 mysql_8033
drwxr-xr-x. 9 root root 129 2월 27 21:53 mysql_8035
[root@test03 local]# chown -R mysql:mysql mysql_8035
[root@test03 local]# ls -ltr
합계 0
drwxr-xr-x. 10 mysql mysql 141 12월 25 23:36 mysql_8033
drwxr-xr-x. 9 mysql mysql 129 2월 27 21:53 mysql_8035
4. shutdown
# 이중화가 된 서버라면
mysql> show replica status;
mysql> stop replica;
# 인스턴스 종료
mysql> exit
Bye
[root@test03 ]# mysql.server stop
Shutting down MySQL. SUCCESS!
5. my.cnf & mysql.server 복사 및 수정
# 구동했던 기존 버전 파일을 복사해서 필요한 부분만 수정을 하겠습니다.
# my.cnf
[root@test03 ]# cp /etc/my_8033.cnf /etc/my_8035.cnf
# mysql.server
[root@test03 ]# mv /usr/bin/mysql.server /usr/bin/mysql_8033.server
[root@test03 ]# cp /usr/bin/mysql_8033.server /usr/bin/mysql.server
- 위 파일 내용의 설명은 여기를 참고해주세요.
# 수정된 내용
# my.cnf
basedir = /mysql/local/mysql_8035
socket = /tmp/mysql_8035.sock
# mysql.server
basedir=/mysql/local/mysql_8035
mysqld_pid_file_path=/data/mysql_data/mysqld_8035.pid
$bindir/mysqld_safe --defaults-extra-file=/etc/my_8035.cnf --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &
6. MySQL 8.0.35 시작
[root@test03 local]# mysql.server start
Starting MySQL.. SUCCESS!
- 만약 5.x 에서 8.0 으로 업그레이드를 할 경우, 로그정보에는 my.cnf에서 기존 사용되던 파라미터 값들이 deprecated 된 경우가 많아, warning 또는 Error가 나올 것입니다. 로그를 꼼꼼히 확인하여, 제거하거나 대체 파라미터를 찾아 수정을 해주시면 됩니다.
7. upgrade
(1) MySQL 8.0.16 미만에서는 다음과 같은 작업을 해줘야합니다.
[root@test03 bin]# ./mysql_upgrade -uroot -p -S /tmp/mysql_8035.sock
- 만약 8.0.16 상위 버전에서 이 작업을 실행했다면 다음과 같은 문구를 보여줍니다. --upgrade 옵션을 사용하라고 나옵니다.
(2) 저는 8.0.35 버전이기 때문에 mysqld --upgrade 를 사용해야합니다.
# --upgrade 옵션에는 MINIMAL, FORCE, NONE 이 존재합니다. 3가지 모두 필요에 의해 사용되고 있겠지만 해당 옵션값을 사용한다면 업그레이드를 하는 의미가 없지 않을까 생각됩니다.
- FORCE : 업그레이드를 강제로 시킴.(안정성을 위해 추천하지 않습니다.)
- NONE : 업그레이드를 안함.
- MINIMAL : 최소 업그레이드 진행(허용된 기능이 제한적이라, 기능을 제대로 사용 못할 수가 있습니다.)
# 앞서 우리는 mysql.server 를 실행하여 인스턴스를 실행시켰습니다. mysql.server를 열어보면 mysqld_safe 를 실행 시키는 부분이 있습니다. 이 부분에 --upgrade의 옵션을 넣어주면 내가 선택한 옵션으로 계속 구동이 될 것이지만, 저는 해당 옵션을 넣지 않았기 때문에자동으로 업그레이드 진행했다고 볼 수 있을 것 같습니다.(추측)
mysqld_safe --default-extra_file=/etc/my.cnf..........
# 초기 인스턴스 실행했을 때 mysql.log 를 보면 아래와 같은 문구가 보이는데, 이것은 업그레이드를 자동으로 했다는 것을 말하는게 아닐까 생각됩니다.
저는 버전 차이가 얼마 나지 않아서 내용이 빈약할 수 있겠으나, 5.x에서 8.0으로 넘어갔을때는 좀더 많은 내용이 출력되지 않을까 생각합니다.
8. mysqlcheck
- 마지막으로 mysqllcheck를 통하여 업그레이드가 문제없이 진행되었는지 확인을 해보겠습니다.
./mysqlcheck -u root -p --all-databases --check-upgrade -S/tmp/mysql_8035.sock
# In-place upgrade 에 대해서 알아보았습니다. dump를 이용한 업그레이드 방식에 대해 알고 싶으시면 여기를 누르세요.
'MySQL > Class' 카테고리의 다른 글
기초공부 - (8) 테이블 복구 (0) | 2024.03.10 |
---|---|
HA 구성 - (6) MHA : FailOver (0) | 2024.03.05 |
기초공부 - (7) 매개변수 이름을 테이블명으로 사용한다면 (0) | 2024.02.21 |
기초공부 - (6) limit & offset (0) | 2024.02.19 |
기초공부 - (5) 더미 데이터 넣기 (0) | 2024.02.12 |