2.2.3 서버 연결 테스트
다음과 같이 여러 가지 형태의 명령행 인자를 넣어 접속을 시도할 수 있다.
linux> mysql -u root -p --host=localhost --socket=/tmp/mysql.sock
linux> mysql -u root -p --host=127.0.0.1 --port=3306
linux> mysql -u root -p
2.2.3.1 linux> mysql -u root -p --host=localhost --socket=/tmp/mysql.sock
MySQL socket file을 이용해 접속하는 예제다
2.2.3.2 linux> mysql -u root -p --host=127.0.0.1 --port=3306
TCP/IP를 통해 로컬호스트로 접속하는 예제인데, 이 경우 포트를 명시하는 것이 일반적이다. 로컬 서버에 MySQL이 아니라 원격 호스트에 있는 MySQL 서버에 접속할때는 이걸 사용해야함
MySQL 서버에 접속할 때는
호스트를 locahost로 명시하는 것과 127.0.0.1로 명시하는 것이 각각 의미가 다름
--host=localhost 옵션을 사용하면 MySQL client 프로그램은 항상 socket file을 통해 MySQL 서버에 접속하게 되는데
이는 'Unix domain socket'을 이용하는 방식으로 TCP/IP를 통한 통신이 아니라 유닉스의 프로세스간 통신(IPC)의 일종이다
하지만 127.0.0.1을 사용하는 경우에는 자기 서버를 가리키는 루프백 IP 이기는 하지만 TCP/IP 통신 방식을 사용하는 것
2.2.3.3 linux> mysql -u root -p
별도로 호스트 주소와 포트를 명시하지 않는다. 이 경우에는 기본값으로 호스트는 localhost가 되며 소켓 파일을 사용하게 되는데
소켓 파일의 위치는 MySQL 서버의 설정 파일에서 읽어서 사용함 소켓 파일은
MySQL 서버를 재시작 하지 않으면 다시 만들어 낼 수 없기 때문에 삭제하지 않도록 한다
유닉스나 리눅스에서 mysql client program을 실행하는 경우에는 mysql 프로그램의 경로를 PATH 환경 변수를 등록해둔다.
2.3 MySQL 서버 업그레이드
MySQL 서버를 업그레이드하는 방법으로 다음의 두 가지 방법을 생각해볼 수 있다.
- MySQL 서버의 데이터 파일을 그대로 두고 업그레이드하는 방법
- mysqldump 도구 등을 이용해 mysql 서버의 데이터를 SQL 문장이나 텍스트 파일로 덤프한 후, 새로 업그레이드된 버전의 MySQL 서버에서 덤프된 데이터를 적재하는 방법
1. MySQL 서버를 데이터 파일을 그대로 두고 업그레이드 하는 방법
이 방법은 '인플레이스 업그레이드(In-Place Upgrade)' 라고 하며, 2번 방법은 '논리적 업그레이드 라고 한다 '
인플레이스 업그레이드는 여러 가지 제약 사항이 있지만 업그레이드 시간을 크게 단축할 수 있다.
반대로 논리적 업그레이드는 버전 간 제약 사항이 거의 없지만 업그레이드 시간이 매우 많이 소요될수 있다
2.3.1. 인플레이스 업그레이드 제약 사항
업그레이드는 마이너(패치) 버전 간 업그레이드와 메이저 버전 간 업그레이드를 생각해볼 수 있다
동일 메이저 버전에서 마이너 버전 간 업그레이드는 대부분 데이터 파일의 변경 없이진행됨
하지만 메이저 버전 간 업그레이드는 대부분 크고 작은 데이터 파일의 변경이 필요하기 때문에 반드시 직전 버전에서만 업그레이드가 허용됨
예를 들어 MySQL 5.5 -> 5.6 으로는 업그레이드가 가능하지만 5.5 -> 5.7 or 8.0 으로 두 단계 뛰는건 지원하지 않는다.
메이저 버전 업그레이드는 데이터 파일의 패치가 필요한다
8.0 서버 프로그램은 직전 메이저 버전인 5.7 버전에서 사용하던 데이터 파일과 로그 포맷만 인식하도록 구현되기 때문임
인플레이스 업그레이드 에서 한 가지 더 주의해야할 점은 메이저 버전 업그레이드가 특정 마이너 버전에서만 가능한 경우도 있다
예를 들어 MySQL 5.7.8 버전을 사용 중 이라면 8.0 버전으로 바로 업그레이드 할 수 없다 왜냐 5.7.8이 GA(General Availability) version이 아니기 때문
2.3.2. MySQL 8.0 업그레이드 시 고려 사항
mysql 8.0에서는 상당히 많은 기능들이 개선되거나 변경됨 그중에서도 5.7 version과 8.0 version의 기본적인 부분의 차이점과
mysql 8.0에서는 사용할 수 없는 기능들이 몇 가지 있다 그래서 업그레이드 하기 전 아래 내용이 미치지는 않는지 꼭 확인해보자
- 사용자 인증 방식 변경
- 8.0 부터 Caching SHA-2 Authentcation 인증 방식이 기본 인증 방식으로 바뀌었다 이전 버전은 Native Authentication인증 방식을 사용하겠지만 8.0 부터는 별도의 옵션 없이 생성되는 사용자는 Caching SHA-2 Authentcation 이걸로 사용하게 됨 만약 Native Authentication을 계속 사용하고자 한다면 MySQL 서버를 시작할 때
- --default-authentication-plugin=mysql_natvie_password 를 사용하자
- 호환성 체크
- 5.7 버전에서 손상된 FRM 파일이나 호환되지 않는 데이터 타입 또는 함수가 있는지 mysqlcheck 유틸리티를 확인해볼 것
- 외래키 이름 길이
- 8.0 부터는 64글자로 제한
- 인덱스 힌트
- 5.7 에서는 성능 향상이 있던게 8.0에는 성능 저하가 있을 수 있음
- 파티션을 위한 공용 테이블스페이스
- MySQl 8.x에서는 파티션의 각 테이블스페이스를 공용 테이블 스페이스에 저장할 수 없음 그래서 파티션의 테이블 스페이스가 공용 테이블스페이스에 저장된 것이 있는지 먼저 확인하고, 있다면 ALTER TABLE ... REOGANIZE 명령을 실행해 개별 테이블스페이스를 사용하도록 변경해야함
- 8.0 부터 Caching SHA-2 Authentcation 인증 방식이 기본 인증 방식으로 바뀌었다 이전 버전은 Native Authentication인증 방식을 사용하겠지만 8.0 부터는 별도의 옵션 없이 생성되는 사용자는 Caching SHA-2 Authentcation 이걸로 사용하게 됨 만약 Native Authentication을 계속 사용하고자 한다면 MySQL 서버를 시작할 때
2.4 서버 설정
일반적으로 MySQL 서버는 단 하나의 설정 파일을 사용하는데, 리눅스를 포함한 유닉스 계열에서는 my.cnf라는 이름을 사용하고,
윈도우에서는 my.ini라는 파일을사용함 MySQL 서버는 시작될때만 이 설정 파일을 참조하는데, 이 설정 파일의 경로가 고정돼 있는건 절대로 아님 서버는 지정된 여러 개의 디렉터리를 순차적으로 탐색하면서 처음 발견된 my.cnf 파일을 사용하게 된다.
직접 설치하면 이 디렉터리가 다르게 설정될 수 있음 mysql server가 어느 디렉터리에서 my.cnf파일을 읽는지 궁금하다면 다음과 같이 옵견을 주어 확인해보자 mysqld --verbose --help
물론 이것만 나오지는 않고 수많은 내용이 나오는데 맨앞에 찾는 순서를 볼 수 있다 나의 노트북에서는 다음과 같은 수순으로 파일을 찾는다
1. /etc/my.cnf
2. /etc/mysql/my.cnf
3. /opt/homebrew/etc/my.cnf
4. ~/.my.cnf
실제 MySQL 서버는 단 하나의 설정 파일만 사용하지만
설정 파일이 위치한 디렉터리는 여러 곳일 수 있음
만약 실수로 1번과 2번 디렉터리에 각각 my.cnf 파일을 만든경우 MySQL 측에서는 어느 디렉터리의 my.cnf 파일을 참조해서 기동했는지 알아내가 쉽지 않음 이러한 경우에는 위 예제의 명령으로 MySQL 서버가 어느 디렉토리를 먼저 읽는지 (우선순위)을 확인해야함
'책 > Real MySQL 8.0' 카테고리의 다른 글
chapter 4. 아키텍처 (1) (0) | 2024.02.09 |
---|