목록 확인후 삭제
일단은 maria-server만 삭제해보기
[ec2-user@ip-172-31-6-25 mysql]$ yum list installed mariadb\*
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
1 packages excluded due to repository priority protections
Installed Packages
MariaDB-backup.x86_64 10.5.12-1.el7.centos @mariadb
MariaDB-client.x86_64 10.5.12-1.el7.centos @mariadb
MariaDB-common.x86_64 10.5.12-1.el7.centos @mariadb
MariaDB-compat.x86_64 10.5.12-1.el7.centos @mariadb
MariaDB-server.x86_64 10.5.12-1.el7.centos @mariadb
[ec2-user@ip-172-31-6-25 mysql]$ yum remove MariaDB-server.x86_64
다시 maria-server 설치
yum install mariadb mariadb-server
다시 설치했지만 systemctl start mariadb가 되지 않았다.
오류는 전과 동일했는데.이는 mariadb-server를 새로 설치해도 기본 schema와db들이 설치되지 않았기 때문이다. ( 기존에 mysql 디렉토리가 있어서 생성을 안했나?)
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal mariadbd[5044]: 2021-11-10 5:54:00 0 [ERROR] Could not open mysql.plugin table: "Table 'mysql.plugin' doesn't exist". Some plugins may be not loaded
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal mariadbd[5044]: 2021-11-10 5:54:00 0 [ERROR] Can't open and lock privilege tables: Table 'mysql.servers' doesn't exist
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal mariadbd[5044]: 2021-11-10 5:54:00 0 [Note] Server socket created on IP: '::'.
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal mariadbd[5044]: 2021-11-10 5:54:00 0 [Note] InnoDB: Loading buffer pool(s) from /var/lib/mysql/ib_buffer_pool
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal mariadbd[5044]: 2021-11-10 5:54:00 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.db' doesn't exist
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal mariadbd[5044]: 2021-11-10 5:54:00 0 [ERROR] Aborting
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal systemd[1]: mariadb.service: main process exited, code=exited, status=1/FAILURE
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal systemd[1]: Failed to start MariaDB 10.5.13 database server.
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal systemd[1]: Unit mariadb.service entered failed state.
Nov 10 05:54:00 ip-172-31-6-25.ap-northeast-2.compute.internal systemd[1]: mariadb.service failed.
그래서 일단은 모든 mariadb설치 패키지를 삭제하고 새로 설치하기로 했다.
[ec2-user@ip-172-31-6-25 lib]$ yum list installed mariadb\*
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
1 packages excluded due to repository priority protections
Installed Packages
MariaDB-backup.x86_64 10.5.12-1.el7.centos @mariadb
MariaDB-client.x86_64 10.5.12-1.el7.centos @mariadb
MariaDB-common.x86_64 10.5.12-1.el7.centos @mariadb
MariaDB-compat.x86_64 10.5.12-1.el7.centos @mariadb
[ec2-user@ip-172-31-6-25 lib]$ yum remove MariaDB*
MariaDB는 10.5를 설치할 예정이기 때문에
버전정보를 명시한다.
sudo vim /etc/yum/repos.d/MaraiDB.repo
# MariaDB 10.5 CentOS repository list - created 2021-03-16 03:20 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
mariaDB설치
sudo yum install -y MariaDB-server MariaDB-client MariaDB-backup
이렇게 설치하고 나니
/var/lib/mysql 디렉토리안에 정상적으로 시스템db가 생성되었다.
[ec2-user@ip-172-31-6-25 mysql]$ ll
total 110628
-rw-rw---- 1 mysql mysql 24576 Nov 10 06:48 aria_log.00000001
-rw-rw---- 1 mysql mysql 52 Nov 10 06:48 aria_log_control
-rw-rw---- 1 mysql mysql 972 Nov 10 06:48 ib_buffer_pool
-rw-rw---- 1 mysql mysql 12582912 Nov 10 06:48 ibdata1
-rw-rw---- 1 mysql mysql 100663296 Nov 10 06:48 ib_logfile0
drwx------ 2 mysql mysql 4096 Nov 10 06:48 mysql
drwx------ 2 mysql mysql 20 Nov 10 06:48 performance_schema
drwx------ 2 mysql mysql 20 Nov 10 06:48 test
sudo systemctl enable mariadb
sudo vim /etc/my.cnf
[mysqld]
default_storage_engine=innodb
init-connect='SET NAMES utf8mb4'
lower_case_table_names=1
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
port=3306
default-character-set = utf8mb4
[mysqldump]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
서버 재시작
설정확인
show variables like 'c%';
mysql -u root -p
로 접속하려는데 , 권한 문제로 접속이 안되었다.
sudo mysql -u root -p 로 접속하니 문제없이 접속되었다.
whereis mariadb
whereis mysql
혹은
ps aux | grep mysql
show
variables like 'datadir'
mariadb의 실행파일의 경로를 확인해보니
/usr/bin/mysql
근데 ps aux | grep mysql로 확인해보면
mysql 5603 0.0 8.1 1163908 82196 ? Ssl 06:52 0:00 /usr/sbin/mariadbd
둘의 경로가 다르다.
차이가 뭘까
mariadb에 접속할 때
mysql -u root -p
에서 mysql은 어느 디렉토리안에 bin 파일일까 ?
env를 통해 환경변수를 확인해보면
PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
따라서 /usr/bin의 mysql을 실행하면 /usr/sbin/mariadbd가 실행되는 것 같다.
기존에 /usr/bin 의 권한이 root로 되어있기 때문에 ec2-user로 접속했을때 오류가 나는게 아닐까?
해당 실행파일 owner를 ec2-user로 변경해보았다.
실행파일의 권한을 변경하는 것은 의미가 없었다.
mysql의 root 계정으로의 접속은 root system계정으로 접속이 가능했고,
ec2-user 계정은
mysql -u ec2-user -p
로 접속이 가능했다.
또한 접속후 dbalkh 계정 생성후
grant all privileges on *.* to dbalkh
실행 후 ec2-user로 dbalkh계정으로 접속하면 접속이 되었다.
[ec2-user@ip-172-31-6-25 sbin]$ mysql -u dbalkh -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 22
Server version: 10.5.13-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
아직 왜 mysql root계정은 시스템 root계정으로밖에 접속이 안되는지 모르겠다.
구글링 해보니, Mysql에서 root계정으로 접속할 때 초기에는 Linux local 인증을 사용하기 때문에, root계정은 시스템 root 인증으로만 접속이 가능하다.
따라서 일반 시스템사용자도 mysql root계정으로 접속하기 위해서는 mysql root계정의 인증방식을 변경해주어야 한다.
https://www.lesstif.com/dbms/mysql-error-1698-28000-89555999.html
https://stackoverflow.com/questions/39281594/error-1698-28000-access-denied-for-user-rootlocalhost