이번 글에서는 Maria 10.0.28 -> 10.1.24 버전으로 엔진 업그레이드를 하는 방법과   10.1 버전부터 새로 추가된 계정 패스워드 복잡도 기능을 소개하겠습니다.
(ORACLE - 계정 profile 의 PASSWORD_VERIFY_FUNCTION 기능과 동일)
 

--1. 10.0.28 확인

 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6

Server version: 10.0.28-MariaDB MariaDB Server

 
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]> select * from mysql.upgrade_test;
+----------------+
| name           |
+----------------+
| before upgrade |
+----------------+
1 row in set (0.00 sec)
MariaDB [(none)]> shutdown;
 
-> 데이터 유실 테스트를 위해 테스트 테이블도 생성함
 
 

--2. 기존 엔진 삭제

 
-1. 기존 DB my.cnf 복사
 
[root@ip-172-31-11-94 mysql]# cp my.cnf /engn001/masvc01/
[root@ip-172-31-11-94 mysql]#
 
=> 기존 DB의 my.cnf 에 기존 DB의 데이터 위치등의 정보와 DB 환경 설정등이 저장되어 있으므로 재사용함
 
-2. 기존 엔진 (10.0.28) 삭제
 
[root@ip-172-31-11-94 masvc01]# ls
10.0.28  my.cnf  TEST
[root@ip-172-31-11-94 masvc01]# rm -rf 10.0.28
[root@ip-172-31-11-94 masvc01]# ls -ltr
total 8
drwxr-xr-x 4 masvc01 mysql 4096 Jul 10 05:29 TEST
-rw-r--r-- 1 root    root  3089 Jul 10 06:29 my.cnf
 
-> 기존 엔진 10.0.28 디렉토리 삭제
 
-3. 새 엔진 (10.1.24) 설치
 
[root@ip-172-31-11-94 upgrade]# pwd
/engn001/masvc01/upgrade
[root@ip-172-31-11-94 upgrade]# tar zxpvf mariadb-10.1.24-linux-x86_64.tar.gz
[root@ip-172-31-11-94 upgrade]# ln -s mariadb-10.1.24-linux-x86_64 mysql
[root@ip-172-31-11-94 upgrade]# cp ../my.cnf /engn001/masvc01/upgrade/mysql/   
[root@ip-172-31-11-94 mysql]# ./bin/mysqld_safe --defaults-file=/engn001/masvc01/upgrade/mysql/my.cnf --user=masvc01 &
 
 
=> 새 엔진 (10.1.24 버전) 압축해제 후 엔진 설치( script 디렉토리의 mysql_installation_db 스크립트) 수행 없이 DB 기동
=> 복사한 my.cnf 에서 구 엔진 디렉토리 -> 새로운 엔진 디렉토리로 수정 필요
 
 
 

--3. 업그레이드 및 데이터 확인

 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3

Server version: 10.1.24-MariaDB MariaDB Server

 
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
 
MariaDB [(none)]>
MariaDB [(none)]>
MariaDB [(none)]> select * from mysql.upgrade_test;
+----------------+
| name           |
+----------------+
| before upgrade |
+----------------+
1 row in set (0.00 sec)
 
-> 데이터유실 테스트를 위해 생성한 mysql.upgrade_test 도 확인됨
 
 

--4. 패스워드 복잡도 설정

 
기존 10.0 버전에서는 패스워드 복잡도 설정 관련 플러그인 ( simple_password_check.so ) 이 없음
10.1 버전부터 지원
 
-- 10.0.28 버전의 플러그인 
 
[root@ip-172-31-11-94 plugin]# pwd
/engn001/masvc01/10.0.28/mysql/lib/plugin
[root@ip-172-31-11-94 plugin]# ls -ltr simple_password*
ls: cannot access simple_password*: No such file or directory
 
 
-- 10.1.24 버전의 플러그인
 
 

 
-- 플러그인 설치
 
MariaDB [(none)]> INSTALL SONAME 'simple_password_check';
Query OK, 0 rows affected (0.00 sec)
 
-- 정상적으로 설치완료 되면 아래와 같이 조회됨
 
MariaDB [(none)]> show variables like 'simple%';
+-----------------------------------------+-------+
| Variable_name                           | Value |
+-----------------------------------------+-------+
| simple_password_check_digits                | 1     |
| simple_password_check_letters_same_case | 1     |
| simple_password_check_minimal_length    | 8     |
| simple_password_check_other_characters  | 1     |
+-----------------------------------------+-------+
4 rows in set (0.00 sec)
 
-- 패스워드 복잡도 옵션
 
1) simple_password_check_digits - 숫자 1 : 필수포함 0 : 선택 default 1
2) simple_password_check_letters_same_case - 대문자 1: 필수포함 0 : 선택 default 1
3) simple_password_check_minimal_length : 패스워드 길이 default 8
4) simple_password_check_other_characters - 특수문자 1 : 필수포함 0 : 선택 default 1
 
-- 옵션 설정 방법
 
set global simple_password_check_digits =0;
 
--5. 예시 (default 설정일 때)
 
1) MariaDB [(none)]> create user 'test'@'%' identified by 'passwordtest123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
 
=> 대문자, 특수문자 미포함
 
2) MariaDB [(none)]> create user 'test'@'%' identified by '!passwordtest123';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
 
=> 대문자 미포함
 
3) MariaDB [(none)]> create user 'test'@'%' identified by '!!passwordtest##';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
 
=> 숫자 미포함
 
*예외 
 
MariaDB [(none)]> update mysql.user set password=password('test') where user='test';
Query OK, 0 rows affected (0.00 sec)
 
=> update 는 password validation 미적용됨