<권한설정>

grant all privileges on 디비명.테이블명 to 사용자@'접속지 주소' identified by '암호' (with grant option);

grant all privileges on *.* to  root@'%' identified by '암호with grant option;
grant all privileges on *.* to  root@'localhost' identified by '암호with grant option;

<권한 제거>
revoke all on 디비명.테이블명 from 사용자;

<권한 적용>
# 모든 명령 후에 항상 아래 명령을 실행해야 실제로 적용된다. 
flush privileges; 



<기타>
# '사용자'가 '암호'으로 111.222.333.0/24 에서 모든 디비와 테이블에 접속하도록 허용
grant all privileges on *.* to  사용자 @'111.222.333.%' identified by '암호';

# '사용자'가 '암호'으로 111.222.333.444 에서 db1 디비의 모든 테이블에 접속하도록 허용
grant all privileges on db1.* to 사용자@'111.222.333.444' identified by '암호';

# '사용자'가 '암호'으로  localhost 에서 db1 디비의 table1에 접속하도록 허용
grant all privileges on db1.table1 to 사용자@'localhost' identified by '암호';

[출처] http://ir.bagesoft.com/675


현재 사용 중인 MySQL Storage Engine 확인 법입니다.
 
root 계정으로 로그인 한 뒤 
 
아래의 명령어를 입력 합니다.
 
show engines\G
 
ex)
 
mysql> show engines\G
*************************** 1. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
 
※ Support에 YES 인 경우 지원이 되는 경우 이며 No로 표기되는 경우 지원이 되지 않는 경우 입니다.



설치 마리아디비 버전은 stable최신버전 10.0.22


1. 소스 다운로드(생략)

2. 압축해제(생략)

3. cmake

#cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mariadb \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mariadb/data \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATEDX_STORAGE_ENGINE=1 \
-DWITH_ARIA_STORAGE_ENGINE=1 \
-DWITH_XTRADB_STORAGE_ENGINE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \

4. 사용자 추가

#useradd mysql

5. 폴더 권한 변경

#chown -R mysql.mysql /usr/local/mariadb/

6. 기본 DB 생성

#/usr/local/mariadb/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mariadb --datadir=/usr/local/mariadb/data

7. 기존에 생성된 my.cnf 백업 및 기존에 제공되는 걸로 변경

#mv /etc/my.cnf /etc/my.cnf.bak

#cp /usr/local/mariadb/support-files/my-innodb-heavy-4G.cnf /etc/my.cnf

[7-1] 로그 파일, pid파일 경로 변경시 추가작업

/etc/my.cnf 파일에

log-error=/path/to/logpath/mariadb.log

pid-file=/path/to/pidpath/mariadb.pid

추가.


해당 경로에 디렉토리는 자동으로 생성되지 않으므로 직접 생성해줘야함.

또 디렉토리 생성 후 소유자와 그룹을 mysql로 변경해줘야 파일이 생성됨.


해당 부분 없을시 로그파일과 pid파일은 /usr/local/mariadb/data에 저장된다.


8. my.cnf 파일에 문자열 설정값 추가


character_set_server = utf8

collation_server = utf8_general_ci


9. 마리아디비 구동


#/usr/local/mariadb/support-files/mysql.server start


10. 루트계정 비밀번호 변경


#/usr/local/mariadb/bin/mysqladmin -u root password 'new-password'


-- 트러블슈팅


ERR1) cmake 중

-- Could NOT find Curses (missing:  CURSES_LIBRARY CURSES_INCLUDE_PATH)

CMake Error at cmake/readline.cmake:85 (MESSAGE):

  Curses library not found.  Please install appropriate package,


SOLVE) ncurses-devel 설치

yum install ncurses-devel


--


ERR2) cmake 중

-- Looking for event.h - not found

-- Configuring incomplete, errors occurred!


SOLVE) openssl-devel 설치

yum install openssl-devel 


이걸 깔면서 의존성걸린 패키지에서 해결되는듯

--

출처: http://lsfa.tistory.com/15 [주제음슴]

MySQL 의 기본 스토리지 엔진이 무엇인지 확인하고자 할 때 아래 Query 를 실행 할 것

SQL>SELECT engine, support FROM information_schema.engines WHERE support='DEFAULT';

예시)

mysql> SELECT engine, support FROM information_schema.engines WHERE support='DEFAULT';
+--------+---------+
| engine   | support  |
+--------+---------+
| InnoDB  | DEFAULT |
+--------+---------+
1 row in set (0.03 sec)


mysql-5.5.x 에서 character-set 변경시
아래와 같이 my.cnf를 수정 후 mysql 데몬을 재시작 합니다.

 

파일 위치 : /etc/my.cnf

utf-8 에서 euckr 로 변경하는 예)

 

[client]
default-character-set=euckr
 
[mysql-5.5.x 에서 character-set 변경 ]

 

[mysqld]
init_connect=set names euckr
character-set-server=euckr

 

[mysql]
default-character-set=euckr

 

 

mysql 데몬을 stop/start 해줍니다.

예)

# /usr/local/mysql/support-files/mysql.server stop

# /usr/local/mysql/support-files/mysql.server start


MySQL 서버는 자동으로 MyISAM 테이블을 체크하고 repair 하도록 지시할 수 있다. 자동으로 repair 하도록 하면, 서버는 가장 최근에 문제없이 closed 된 테이블인지 보기 위해 그것을 열 때, 각각의 MyISAM 테이블을 체크한다. 테이블이 정상이 아니라면 서버는 테이블을 repair 한다.

자동으로 MyISAM 테이블을 유지보수 하도록 하기 위해서 서버를 --MyISAM-recover 옵션으로 시작해야한다. 이 옵션은 아래에 나와 있는 값을 한 개나 그 이상의 개수로 지정할 수 있으며 콤마로 분리된다.

my.cnf의 [mysqld]항목에 옵션추가

myisam-recover=[mode]

[mode]
DEFAULT = 디폴트 체크를 한다.
BACKUP = 변경된 테이블의 백업을 만들도록 한다.
FORCE =  데이터의 하나 이상의 행을 손실시킨다 하더라도 테이블 복구를 수행하도록 한다.
QUICK = 빠른 복구를 수행한다. DELETE나 UPDATE로 인한 hole을 가지고 있지 않은 테이블은 skip 된다.

ex) myisam-recover=force,backup or myisam-recover=FORCE,BACKUP

<Mysql table 이 손상되는 경우가 발생할 때, 상태 확인 및 복구하는 방법>

1) MySQL 데이터베이스 특정 table 이 손상 되었는지 여부를 확인
#use database이름 : 확인할 DB 선택
#check table table이름 : table 상태 확인 또는 analyze table table이름

2) MySQL Table 복구
#use database이름 : 확인할 DB 선택
#repair table table이름 : table 복구

3) MySQL Table 최적화
#use database이름 : 확인할 DB 선택
#optimize table table이름 : table 최적화



기본적으로 localhost 에서만 접속이 허용되는 DB 를 외부(PC 및 타 서버) 환경에서 접속하려고 할 때

기존의 db 유저의 host를 변경할 것이 아니라 아래의 쿼리문을 이용해 유저를 추가해주면 된다.

(host 부분의 %는 모든 호스트에서 접속 허용이며 이부분을 IP 주소로 입력하면 해당 IP 에서만 접속이 가능함.)

 

[추가]

1. insert into user (host,user,password) values ('%','user_name',password('user_password'));


[mysql 5.5 이상에서는 아래 쿼리를 실행할 것!!!]

insert into user (Host, User, Password, ssl_cipher, x509_issuer, x509_subject, authentication_string) values('%','user_name', password('user_password'),'','','','');


2. insert into db (host,db,user) values ('%','db_name','user_name');

3. flush privileges;
4. grant all privileges on user_name.* to user_name@'%';

 

(Root 계정의 경우 2번은 생략하고 1번 쿼리 이후 4번 쿼리 중 user_name.* 대신 *.* 로 처리할 것!)

 

5. flush privileges;

 

위 방법대로 했는데도 외부 접속이 안된다면 /etc/my.cnf 파일의 항목 중 bind-address = 127.0.0.1 이 있다면

 

이를 주석처리 한다. (bind-address = 127.0.0.1 는  로컬호스트에서만 접속을 허용한다는 의미임.)

 

bind-address = 127.0.0.1 를 주석처리해도 안된다면 방화벽에서의 mysql 포트 (기본:3306)이 차단되어있을 가능성이 있으므로

 

확인 해 볼것! 

 

[삭제]

아래는 위의 방법대로 외부 접속 호스트 추가 후 삭제하는 방법이다.

(user_name 과 host 부분을 and 조건으로 모두 만족해야 처리되니 주의할 것!!  // % 대신 ip를 입력해도 무방)

 

1. delete from user where user='user_name' and host='%';

(root 계정의 경우 1번만 실행하면 됨)
2. delete from db where user='user_name' and host='%';

flush privileges;


DB에 영향을 미치는 쿼리문을 찾아낼 수 있는 좋은 방법.

① mysql> show processlist;
show processlist -i5 여기서 숫자는 리프래쉬할 시간(초)입니다.
]# mysqladmin -uroot -p proc stat -i5 (밑에것 보다 조금더 상세)
]# mysqladmin -uroot -p processlist -i5

② mysql> show status;

기타)

]# top

팁!) ①의 경우 mysql에 접속을 한상태에서 내리는 명령어이지만 아래와 같이 접속하자 마자 바로 보여주는 예도 있다.
]# mysqladmin -uroot -p processlist

------------------------- sleep 죽이는 법 두가지 -------------------------
① mysql>kill id;
② mysqladmin kill id -u root -p

 

MySQL db 일반유저 (root 게정 변경가능) 패스워드 변경하고 싶을 때 방법이다.

# mysql -u root -p
Enter password : (패스워드를 입력하고 들어가서)

mysql>use mysql

mysql> update user set password=password('패스워드') where user='데이터베이스_id';

mysql> flush privileges;