2024. 2. 26. 17:23ㆍLinux/CentOS7
mysql 은
오픈 소스 관계형 데이터 베이스인
RDBMS ( Relational DataBase Management System ) 다
즉, 관계형 데이터베이스 관리 시스템중 하나이다.
이 시스템을 사용하기 위해서 데이터 베이스의 구성 요소를 이해할 필요가 있다.
데이터베이스의 정의
특정 조직의 업무를 수행(목표달성)하는 데 필요한 상호 관련된 데이터들의 모임
테이블 구성요소
릴레이션=테이블 (엑셀의 sheet)
관계형 데이터베이스에서 정보를 저장하는 기본단위 (행과열, 고유한 이름)
속성(Attribute : 어트리뷰트)
하나의 열은 여러개의 속성 정보 표시 (동일이름의 속성 존재불가)
차수 (Degree)
하나의 릴레이션에 들어있는 속성의 수, 최소 1개 이상의 차수 존재
튜플(Tuple, 레코드)
엔티티의 특정 인스턴스에 관한 사실(값)들의 모임
카디날리티(Cardinality)
릴레이션의 튜플 갯수
도메인(Domain)
속성들이 가질 수 있는 값 (예:성별-남녀)
키(key)
검색, 정렬시 Tuple을 구분할 수 있는 기준이 되는 속성
슈퍼키(특정튜플식별:유일성만족) > 후보키(최소성만족) > 기본키 (대체키)
이해가 어렵다면
위의 그림을 보고 이해하자.
mysql은 서버와 클라이언트로 나눠지는데
서버를 설치하면 클라이언트도 같이 설치가 된다.
mysql 서버를 설치해보자
yum -y install mysql-community-server
위 같은 에러 출력과 함께 설치가 안된다.
리포지토리 내에 존재하지 않는 것이다..
우리가 수동으로 리포지토리를 구성해주자
yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
위 명령어로 구성하자
완료 됐다면 이제 서버를 설치해보자
mysql 서버 5.7의 설치가 gpgkey 문제로 설치가 되지 않았다.
이럴땐 리포지토리 설정에서 gpgkey 체크를 비활성화 해주자
vi /etc/yum.reops.d/mysql-community.repo
우리가 설치할 5.7 버전의
gpgcheck를 0으로 변경해주자
이제부턴 설치가 가능할 것이다.
다시 설치를 진행하고 시스템을 실행 시켜주자
yum -y install mysql-community-server
systemctl start mysqld
실행을 했다면 3306포트 (mysql) 이 생성됐는지 확인해보자
ss -nat
지금 상태로도 mysql에 바로 접속할순 없다.
사전 작업이 필요하다.
기본 설정을 작성해보자
mysql_secure_installation
root 의 비밀번호를 입력해도 틀렸다고 나온다.
이 비밀번호는 우리가 OS에 로그인할때와 다른 비밀번호이다.
이 비밀번호를 알기 위해선
/var/log/mysqld.log 를 확인해보자
위처럼 너무 정보가 방대하고 난잡하다
그랩 명령어로 password 가 출력된 부분만 갈무리하자
[root@localhost ~]# cat /var/log/mysqld.log | grep password
2024-02-19T09:55:44.179327Z 1 [Note] A temporary password is generated for root@localhost: Ruoe=qcsZ6ib
2024-02-19T09:56:50.724585Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)
2024-02-19T09:56:52.983879Z 3 [Note] Access denied for user 'root'@'localhost' (using password: YES)
2024-02-19T09:57:19.052063Z 4 [Note] Access denied for user 'root'@'localhost' (using password: NO)
2024-02-19T09:57:21.615961Z 5 [Note] Access denied for user 'root'@'localhost' (using password: YES)
2024-02-19T09:57:23.492006Z 6 [Note] Access denied for user 'root'@'localhost' (using password: NO)
2024-02-19T09:57:29.103543Z 7 [Note] Access denied for user 'root'@'localhost' (using password: YES)
2024-02-19T09:58:20.947482Z 8 [Note] Access denied for user 'root'@'localhost' (using password: NO)
2024-02-19T09:58:23.607966Z 9 [Note] Access denied for user 'root'@'localhost' (using password: YES)
그럼 위와 비슷하게 출력 될 것인데
확인해보면 맨 윗줄에 root@localhost의
임시 비밀번호가 부여 된 것을 볼 수 있다.
그대로 복사해서 로그인 해주자
로그인 하면 여려 질문이 발생한다.
[root@localhost ~]# 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.
존재하는 root 비밀번호가 만료됨을 알림, 새 비밀번호 작성 요구
New password:
새 비밀번호
Re-enter new password:
비밀번호 확인
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
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) : y
비밀번호를 변경할건지 여부 질문 (예)
New password:
새 비밀번호
Re-enter new password:
비밀번호 확인
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
비밀번호 변경 여부 (예)
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) : n
외부에서 root아이디로 접속을 불허 (아니오)
... 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
Mysql에 기본적으로 설치되는 testdb 삭제 (예)
- 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!
위처럼 설정을 마치면 된다.
설정을 마쳤다면
Mysql에 접속해보자
[root@localhost ~]# mysql -uroot -pIt12345!
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
꼭
mysql -u(계정명) -p(비밀번호) 의 형태로 로그인 할 필요는 없다.
위처럼 로그인 하는 형태는 비밀번호를 노출시켜 보안에 좋지 않기 때문이다.
보안을 위해선
mysql -u(계정명) -p
위의 형태로 입력해보자
[root@localhost ~]# mysql -uroot -p
Enter password:
비밀번호를 입력이 출력되고, 비밀번호가 노출되지 않는다.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.7.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
이제 접속했으니 MySql 내에서 사용하는 명령어를 알아볼 차례다
SQL- 구조적 질의어
아래 질의 언어를 통해 데이터베이스를 제어하고 관리
DDL(Data Definition Language) - 데이터 정의어
데이터베이스를 정의하는 언어
데이터리를 생성, 수정, 삭제
데이터의 전체의 골격을 결정하는 역할을 하는 언어.
종류 | 역할 |
CREATE | 데이터베이스, 테이블등을 생성 |
ALTER | 테이블을 수정 |
DROP | 데이터베이스, 테이블을 삭제 |
TRUNCATE | 테이블을 초기화 |
DML(Data Manipulation Language) - 데이터 조작어
정의된 데이터베이스에 입력된 레코드를
조회하거나 수정하거나 삭제
종류 | 역할 |
SELECT | 데이터를 조회 |
INSERT | 데이터를 삽입 |
UPDATE | 데이터를 수정 |
DELETE | 데이터를 삭제 |
DCL(Data Control Language) - 데이터 제어어
데이터베이스에 접근하거나 객체에 권한 부여등.
종류 | 역할 |
GRANT | 특정 데이터베이스 사용자에게 특정 작업에 대한 수행권한 부여 |
REVOKE | 특정 데이터베이스 사용자에게 특정 작업에 대한 수행 권한을 박탈, 회수 |
COMMIT | 트랜잭션의 작업을 원래대로 처리 |
ROLLBACK | 트랜잭션의 작업을 취소 및 원래대로 복구 |
또한 show 명령어를 통해 해당 개체를 확인할 수 있다.
그리고 명령어 끝에 항상 ; 를 붙여준다.
이제 데이터 베이스 user 안에
doghj 테이블을 생성해
사용자들의 정보를 아래와 같이 삽입해 만들어보겠다.
mysql> show databases;
데이터베이스 목록 확인
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
mysql> create database user;
user 데이터베이스 생성
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
데이터베이스 목록 확인
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| user |
+--------------------+
5 rows in set (0.00 sec)
mysql>
자 이러면 데이터 베이스는 생성 됐다.
이제 user 데이터 베이스를 선택해
doghj라는 테이블을 만들어보자
mysql> use user;
user 데이터 베이스로 이동
Database changed
mysql> create table doghj(
-> no int not null,
-> name varchar(20) not null,
-> age int not null,
-> sex varchar(20) not null,
-> id varchar(20) not null,
-> pass varchar(100) not null);
Query OK, 0 rows affected (0.01 sec)
테이블 생성 및 각 컬럼의 속성 부여 (차수 6개)
mysql> show tables;
테이블 확인
+----------------+
| Tables_in_user |
+----------------+
| doghj |
+----------------+
1 row in set (0.00 sec)
mysql> desc doghj;
+-------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+-------+
| no | int(11) | NO | | NULL | |
| name | varchar(20) | NO | | NULL | |
| age | int(11) | NO | | NULL | |
| sex | varchar(20) | NO | | NULL | |
| id | varchar(20) | NO | | NULL | |
| pass | varchar(100) | NO | | NULL | |
+-------+--------------+------+-----+---------+-------+
6 rows in set (0.01 sec)
테이블 구조 확인
mysql>
각 컬럼 생성 후
이번엔 desc 라는 명령어로 테이블 구조를 확인해봤다.
테이블 구조만 볼때는
우리가 원하는 엑셀 구조와는 거리가 먼 것처럼 보인다.
이제 각 필드(컬럼)에 속성을 부여해보자
mysql> insert into doghj values(1 , "kim", 30 , "male" , "test1" , "It1");
Query OK, 1 row affected (0.01 sec)
컬럼의 순서대로 레코드 값 부여 해주기(1행)
mysql> insert into doghj values(2 , "lee", 31 , "female" , "test2" , "It2");
Query OK, 1 row affected (0.01 sec)
컬럼의 순서대로 레코드 값 부여 해주기(2행)
mysql> insert into doghj values(3 , "park", 32 , "male" , "test3" , "It3");
Query OK, 1 row affected (0.00 sec)
컬럼의 순서대로 레코드 값 부여 해주기(3행)
mysql> insert into doghj values(4 , "an", 33 , "male" , "test4" , "It4");
Query OK, 1 row affected (0.01 sec)
컬럼의 순서대로 레코드 값 부여 해주기(4행)
mysql> insert into doghj values(5 , "kang", 34 , "male" , "test5" , "It5");
Query OK, 1 row affected (0.00 sec)
컬럼의 순서대로 레코드 값 부여 해주기(5행)
mysql> insert into doghj values(6 , "choi", 35 , "female" , "test6" , "It6");
Query OK, 1 row affected (0.00 sec)
컬럼의 순서대로 레코드 값 부여 해주기(6행)
mysql> insert into doghj values(7 , "oh", 36 , "male" , "test7" , "It7");
Query OK, 1 row affected (0.00 sec)
컬럼의 순서대로 레코드 값 부여 해주기(7행)
mysql>
레코드 값의 부여도 끝났으니
select 명령어로 확인해보자
mysql> select * from doghj;
doghj 테이블의 모든(*) 항목 조회
+----+------+-----+--------+-------+------+
| no | name | age | sex | id | pass |
+----+------+-----+--------+-------+------+
| 1 | kim | 30 | male | test1 | It1 |
| 2 | lee | 31 | female | test2 | It2 |
| 3 | park | 32 | male | test3 | It3 |
| 4 | an | 33 | male | test4 | It4 |
| 5 | kang | 34 | male | test5 | It5 |
| 6 | choi | 35 | female | test6 | It6 |
| 7 | oh | 36 | male | test7 | It7 |
+----+------+-----+--------+-------+------+
7 rows in set (0.00 sec)
mysql>
그럼 이제 우리가 생각했던 엑셀과 같은 형태로 생성이 완료 된 것이다.
만약 테이블에서 임의의 값을 수정해야할 땐 어떻게 할까??
update 수정 명령어를 사용하면 된다!
mysql> select * from doghj;
+----+------+-----+--------+-------+------+
| no | name | age | sex | id | pass |
+----+------+-----+--------+-------+------+
| 1 | kim | 30 | male | test1 | It1 |
| 2 | lee | 31 | female | test2 | It2 |
| 3 | park | 32 | male | test3 | It3 |
| 4 | an | 33 | male | test4 | It4 |
| 5 | kang | 34 | male | test5 | It5 |
| 6 | choi | 35 | female | test6 | It6 |
| 7 | oh | 36 | male | test7 | It7 |
+----+------+-----+--------+-------+------+
7 rows in set (0.00 sec)
위의 테이블에서 test1 계정의 비밀번호를 It11로 변경해보자
mysql> update doghj set pass="It11" where id="test1";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from doghj;
+----+------+-----+--------+-------+------+
| no | name | age | sex | id | pass |
+----+------+-----+--------+-------+------+
| 1 | kim | 30 | male | test1 | It11 |
| 2 | lee | 31 | female | test2 | It2 |
| 3 | park | 32 | male | test3 | It3 |
| 4 | an | 33 | male | test4 | It4 |
| 5 | kang | 34 | male | test5 | It5 |
| 6 | choi | 35 | female | test6 | It6 |
| 7 | oh | 36 | male | test7 | It7 |
+----+------+-----+--------+-------+------+
7 rows in set (0.00 sec)
mysql>
여러개, 전체의 항목도 수정할 수 있다.
mysql> update doghj set pass="It22" where name="oh" or name="park";
이름이 oh 또는 park 인 사용자의 비밀번호를 It22로 변경한다
Query OK, 2 rows affected (0.00 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> select * from doghj;
+----+------+-----+--------+-------+------+
| no | name | age | sex | id | pass |
+----+------+-----+--------+-------+------+
| 1 | kim | 30 | male | test1 | It11 |
| 2 | lee | 31 | female | test2 | It2 |
| 3 | park | 32 | male | test3 | It22 |
| 4 | an | 33 | male | test4 | It4 |
| 5 | kang | 34 | male | test5 | It5 |
| 6 | choi | 35 | female | test6 | It6 |
| 7 | oh | 36 | male | test7 | It22 |
+----+------+-----+--------+-------+------+
7 rows in set (0.00 sec)
mysql>
mysql> update doghj set pass="temppass1";
모든 사용자의 비밀번호를 임시 비밀번호로 변경하기
Query OK, 7 rows affected (0.01 sec)
Rows matched: 7 Changed: 7 Warnings: 0
mysql> select * from doghj;
+----+------+-----+--------+-------+-----------+
| no | name | age | sex | id | pass |
+----+------+-----+--------+-------+-----------+
| 1 | kim | 30 | male | test1 | temppass1 |
| 2 | lee | 31 | female | test2 | temppass1 |
| 3 | park | 32 | male | test3 | temppass1 |
| 4 | an | 33 | male | test4 | temppass1 |
| 5 | kang | 34 | male | test5 | temppass1 |
| 6 | choi | 35 | female | test6 | temppass1 |
| 7 | oh | 36 | male | test7 | temppass1 |
+----+------+-----+--------+-------+-----------+
7 rows in set (0.00 sec)
mysql>
위처럼 where 라는 조건문을 사용하는 것이 따라
원하는 대로 테이블을 수정할 수 있다.
또한 MySql은 클라이언트가 서버에 접속해서
원격으로 열람,수정이 가능하다!
그전에 권한 부여가 필요하니 실습해보자
먼저 권한 관련 레코드 값을 찾아보자
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| user |
+--------------------+
5 rows in set (0.00 sec)
mysql> use mysql
기본 mysql 데이터 베이스로 이동
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
mysql 아래의 테이블들 확인
+---------------------------+
| Tables_in_mysql |
+---------------------------+
| columns_priv |
| db |
| engine_cost |
| event |
| func |
| general_log |
| gtid_executed |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| innodb_index_stats |
| innodb_table_stats |
| ndb_binlog_index |
| plugin |
| proc |
| procs_priv |
| proxies_priv |
| server_cost |
| servers |
| slave_master_info |
| slave_relay_log_info |
| slave_worker_info |
| slow_log |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
+---------------------------+
31 rows in set (0.00 sec)
mysql> desc user;
테이블중 user 테이블 조회
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
| Host | char(60) | NO | PRI | | |
| User | char(32) | NO | PRI | | |
| Select_priv | enum('N','Y') | NO | | N | |
| Insert_priv | enum('N','Y') | NO | | N | |
| Update_priv | enum('N','Y') | NO | | N | |
| Delete_priv | enum('N','Y') | NO | | N | |
| Create_priv | enum('N','Y') | NO | | N | |
| Drop_priv | enum('N','Y') | NO | | N | |
| Reload_priv | enum('N','Y') | NO | | N | |
| Shutdown_priv | enum('N','Y') | NO | | N | |
| Process_priv | enum('N','Y') | NO | | N | |
| File_priv | enum('N','Y') | NO | | N | |
| Grant_priv | enum('N','Y') | NO | | N | |
| References_priv | enum('N','Y') | NO | | N | |
| Index_priv | enum('N','Y') | NO | | N | |
| Alter_priv | enum('N','Y') | NO | | N | |
| Show_db_priv | enum('N','Y') | NO | | N | |
| Super_priv | enum('N','Y') | NO | | N | |
| Create_tmp_table_priv | enum('N','Y') | NO | | N | |
| Lock_tables_priv | enum('N','Y') | NO | | N | |
| Execute_priv | enum('N','Y') | NO | | N | |
| Repl_slave_priv | enum('N','Y') | NO | | N | |
| Repl_client_priv | enum('N','Y') | NO | | N | |
| Create_view_priv | enum('N','Y') | NO | | N | |
| Show_view_priv | enum('N','Y') | NO | | N | |
| Create_routine_priv | enum('N','Y') | NO | | N | |
| Alter_routine_priv | enum('N','Y') | NO | | N | |
| Create_user_priv | enum('N','Y') | NO | | N | |
| Event_priv | enum('N','Y') | NO | | N | |
| Trigger_priv | enum('N','Y') | NO | | N | |
| Create_tablespace_priv | enum('N','Y') | NO | | N | |
| ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | |
| ssl_cipher | blob | NO | | NULL | |
| x509_issuer | blob | NO | | NULL | |
| x509_subject | blob | NO | | NULL | |
| max_questions | int(11) unsigned | NO | | 0 | |
| max_updates | int(11) unsigned | NO | | 0 | |
| max_connections | int(11) unsigned | NO | | 0 | |
| max_user_connections | int(11) unsigned | NO | | 0 | |
| plugin | char(64) | NO | | mysql_native_password | |
| authentication_string | text | YES | | NULL | |
| password_expired | enum('N','Y') | NO | | N | |
| password_last_changed | timestamp | YES | | NULL | |
| password_lifetime | smallint(5) unsigned | YES | | NULL | |
| account_locked | enum('N','Y') | NO | | N | |
+------------------------+-----------------------------------+------+-----+-----------------------+-------+
45 rows in set (0.00 sec)
user 테이블 중에서 host, user, authentication_string 필드가 존재함을 확인
mysql>
이제
host, user, authentication_string필드의 레코드 값을 확인해보자
mysql> select host,user,authentication_string from user;
user 테이블에서 host, user, auth..필드만 조회하기
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *ED252868D0E60DF8C33A31A4750B033E37486EE6 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
+-----------+---------------+-------------------------------------------+
3 rows in set (0.00 sec)
mysql>
확인해보면 root의 host 권한이 localhost로만 되어있다.
모든 권한을 부여해주자
mysql> grant all privileges on *.* to 'root'@'%' identified by 'It12345!';
모든데이터베이스,테이블에대한 모든 권한을 root에 부여
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select host,user,authentication_string from user;
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *ED252868D0E60DF8C33A31A4750B033E37486EE6 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| % | root | *71E03877A4A1AA25D49B3D5712F5CD1EAB9F86C6 |
+-----------+---------------+-------------------------------------------+
4 rows in set (0.00 sec)
mysql>
권한 설정후 확인 해보면 % host 권한을 가진 root가 추가된 것을 볼 수 있다.
grant all privileges on *.* to 'root'@'%' identified by 'It12345!';
이부분을 조금 뜯어볼 필요가 있는데
grant all privileges on : 모든권한 (all 대신 read,write등의 권한만 줄 수도 있음,
all privileges on는 유저 관리를 제외하면 root 권한과 같다)
*.* : 모든 데이터베이스 . 모든 테이블
to 'root'@ : root라는 사용자에게
'%' : 모든 원격접속 (localhost는 local접속)
identified by 'It12345!'; : 해당 비밀번호로 접속
위처럼 내가 원하는 값으로 수정할 수있다.
하지만 실제 서비스중 root 계정을 알려줄 순 없으니
실제론 새계정을 만들어서 권한을 부여할 것이다.
create 명령어를 사용해 생성해주자
mysql> create user 'test'@'localhost' identified by'It12345!';
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,authentication_string from user;
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *ED252868D0E60DF8C33A31A4750B033E37486EE6 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| % | root | *71E03877A4A1AA25D49B3D5712F5CD1EAB9F86C6 |
| localhost | test | *ED252868D0E60DF8C33A31A4750B033E37486EE6 |
+-----------+---------------+-------------------------------------------+
5 rows in set (0.00 sec)
mysql>
확인해보면 grant all ~~ 권한 부여 명령어와 형태가 비슷하다.
그런데 test 계정에게 모든 권한이 아닌
원격접속 및 user.doghj에 대한 조회,수정 권한만 주고 싶다면
원격,조회 권한을 주고 local 권한을 삭제하면 된다.
mysql> grant select, insert on user.doghj to 'test'@'%' identified by 'It12345!';
user.doghj에 대한 조회,수정, 원격접속 권한만 부여
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select host,user,authentication_string from user;
테이블에 새로 생성된 권한 확인
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *ED252868D0E60DF8C33A31A4750B033E37486EE6 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| % | root | *71E03877A4A1AA25D49B3D5712F5CD1EAB9F86C6 |
| localhost | test | *ED252868D0E60DF8C33A31A4750B033E37486EE6 |
| % | test | *ED252868D0E60DF8C33A31A4750B033E37486EE6 |
+-----------+---------------+-------------------------------------------+
6 rows in set (0.00 sec)
mysql> drop user 'test'@'localhost' ;
원래 존재한 test local접속 권한 삭제
Query OK, 0 rows affected (0.00 sec)
mysql> select host,user,authentication_string from user;
테이블에 사라진 권한 확인
+-----------+---------------+-------------------------------------------+
| host | user | authentication_string |
+-----------+---------------+-------------------------------------------+
| localhost | root | *ED252868D0E60DF8C33A31A4750B033E37486EE6 |
| localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| % | root | *71E03877A4A1AA25D49B3D5712F5CD1EAB9F86C6 |
| % | test | *ED252868D0E60DF8C33A31A4750B033E37486EE6 |
+-----------+---------------+-------------------------------------------+
5 rows in set (0.00 sec)
mysql> flush privileges;
grant 테이블을 reload 함으로써 변경사항 즉시 적용
Query OK, 0 rows affected (0.00 sec)
그럼 이제 포트를 개방하고 (3306)
권한이 적용 됐는지 원격접속 해보자
mysql> exit
Bye
[root@localhost ~]# firewall-cmd --permanent --add-port=3306/tcp
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]#
두번째 서버에도 mysql을 리포지토리에 등록하고
설치해주자
두번째 서버
[root@localhost ~]# yum install -y http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
리포지토리에 등록해주기
Loaded plugins: fastestmirror
mysql57-community-release-el7-11.noarch.rpm | 25 kB 00:00:00
.
.
.
.
Installed:
mysql57-community-release.noarch 0:el7-11
Complete!
[root@localhost ~]# vi /etc/yum.repos.d/mysql-community.repo
리포지토리에 설정
[root@localhost ~]# yum -y install mysql-community-client
클라이언트 mysql 설치
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
.
.
.
.
.
Installed:
mysql-community-client.x86_64 0:5.7.44-1.el7
Dependency Installed:
mysql-community-common.x86_64 0:5.7.44-1.el7 mysql-community-libs.x86_64 0:5.7.44-1.el7
Complete!
[root@localhost ~]# mysql -utest -pIt12345! -h 1.0.0.12
test 계정으로 mysql 서버에 접속
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.44 MySQL Community Server (GPL)
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
접속을 완료했으면
권한이 잘 적용 됐는지 확인하자
mysql> use mysql
ERROR 1044 (42000): Access denied for user 'test'@'%' to database 'mysql'
권한 없는 데이터 베이스로의 접근 제한
mysql> use user
권한 부여된 데이터 베이스는 접근 가능
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> create table aa( no int not null);
ERROR 1142 (42000): CREATE command denied to user 'test'@'1.0.0.11' for table 'aa'
권한 없는 테이블 생성 불가
mysql> insert into doghj values(8, "shin" , 20 , "female" , "test8" , "temppass1");
권한 부여된 insert 명령어 사용 가능
Query OK, 1 row affected (0.00 sec)
mysql> select * from doghj;
권한 부여된 select 명령어 사용 가능
+----+------+-----+--------+-------+-----------+
| no | name | age | sex | id | pass |
+----+------+-----+--------+-------+-----------+
| 1 | kim | 30 | male | test1 | temppass1 |
| 2 | lee | 31 | female | test2 | temppass1 |
| 3 | park | 32 | male | test3 | temppass1 |
| 4 | an | 33 | male | test4 | temppass1 |
| 5 | kang | 34 | male | test5 | temppass1 |
| 6 | choi | 35 | female | test6 | temppass1 |
| 7 | oh | 36 | male | test7 | temppass1 |
| 8 | shin | 20 | female | test8 | temppass1 |
+----+------+-----+--------+-------+-----------+
8 rows in set (0.00 sec)
mysql>
자 확인 해보면 위처럼 권한 부여가 잘 이뤄졌다!
지금까지 mysql의 사용법에 대해서 알아보았다.
여담으로
mysql 삭제후 재설치 시에
설치가 제대로 진행되지 않을 수도 있다..
그럴땐 MySql 의 잔여 디렉토리 까지 전부 지워준 뒤에
yum reinstall 명령어로 재설치 해주자!
rm -rf /var/lib/mysql/
rm -rf /etc/yum.repos.d/mysql*
yum reinstall -y http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
'Linux > CentOS7' 카테고리의 다른 글
Linux 26 . php , DB, wordprocess 연결을 script로 자동화하기 (0) | 2024.02.27 |
---|---|
Linux 25 . MySql, php, wordpress 구성 (0) | 2024.02.27 |
Linus 23 . HAProxy (1) | 2024.02.25 |
Linux 22 .quota (0) | 2024.02.22 |
Linux 21 . at, cron (0) | 2024.02.20 |