MariaDB에 하이픈(-)이나 점(.)을 포함한 이름으로 데이터베이스를 만들면 에러가 납니다.

예를 들어

create database test-test;

라고 하면 다음과 같은 에러 메시지를 출력하면서 데이터베이스를 생성하지 못합니다.

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '-test' at line 1

이 문제를 해결하는 방법은 데이터베이스 이름을 낮은 액센트표(grave accent)로 감싸는 것입니다. 즉

create database `test-test`;

와 같이 하면 됩니다.


출처 : https://www.manualfactory.net/10161


MySQL mysqldump 시 특정테이블만 백업 받는 방법


DB 테이블 덤프할 때 table_* 이런형태의 asterisk 별표를 사용한 특정 테이블만 받고 싶을때 사용할 수 있습니다.


방법은 여러가지가 있지만 아래처럼 하면 간단하게 백업을 받을 수 있습니다.


# mysqldump -u유저아이디 -p비밀번호 dbname table_* > backup.sql

mysqldump: Couldn't find table: "table_*"


이렇게 하면 에러가 나지요~


# mysqldump -u유저아이디 -p비밀번호 dbname $(mysql -u유저아이디 -p비밀번호 dbname -Bse "show tables like 'test_%'") > backup.sql


이런 방법으로 백업이 가능합니다.

$() 변수로 받는다는 의미입니다.


# mysql -u유저아이디 -p비밀번호 dbname -Bse "show tables like 'test_%'"


괄호 안에 있는 내용을 먼저 테스트 해보고 사용하면 됩니다.



출처: https://ivps.tistory.com/204 [iVPS 가상서버호스팅]


확인된 환경 : MySQL 5.0x, MariaDB 10.1.x,

특정 db 언어셋 확인

show create database DB명;

특정 테이블 언어셋 확인

show create table 테이블명;

특정 데이터베이스의 default character set 수정방법

alter database 디비명 default character set = utf8;

특정 테이블의 default character set 수정방법

alter table 테이블명 default character set = utf8;

[출처] http://www.legendry.net/board_YNNJ65/783


Mysql 4.0 ( euc_kr ) 환경에서 Mysql 5.x ( UTF-8) 환경으로 데이터 이전시

레코드에 포함된 한글 문자열이 모두 깨져서 입력된 경우 이를 올바르게

처리했던 성공사례를 기록한다.

A서버 (Mysql 4.0)

mysqldump -u root -p --default-character-set=euc_kr DB명 > DB명.sql

scp 명령을 이용하여 B서버 (Mysql 5.x) 로 파일 복사

B서버 (Mysql 5.x)

vi 에디터로 sql 파일 내의 TYPE=MyISAM 을 ENGINE=MyISAM 으로 모두 치환

iconv -c -f CP949 -t UTF-8 DB명.sql > DB명_UTF8.sql

CP949 언어셋에 대한 상세 내용은 아래 링크 참조

https://ko.m.wikipedia.org/wiki/%EC%BD%94%EB%93%9C_%ED%8E%98%EC%9D%B4%EC%A7%80_949

새롭게 생성된 UTF-8용 sql 파일을 B서버의 DB명 에 import 시킨 후 phpmyadmin 과 같은

프로그램에서 문자열이 깨지지 않는지 체크해 본다.


1. between 응용

특정 범위 내의 데이터를 조회 하고 싶을 때

select * from 테이블명 where 필드명 between 값1 and 값2;

ex) board01 테이블의 no 필드가 1부터 20 까지의 모든 데이터를 추출할 경우

select * from board01 where no between 1 and 20; 


초기 mysql root 패스워드 설정 및 비번 변경과 root 비번 잃어버렸을 경우 변경 하는방법


1. 초기 mysql root 패스워드 설정하기

mysql 서버에 패스워드 없이 로그인 하게되면 서버에 만들어진 데이터베이스나 테이블
기타 이곳에 저장된 자료가 외부인에게 노출될 수 있다. 따라서 이러한 보안을 목적으로
root 패스워드를 지정하면 mysql 서버를 안전하게 보호할 수 있다.

mysql> use mysql;
mysql> update user set password=password('123456') where user='root';
Query OK, 2 rows affected (0.03 sec)
Rows matched: 2 Changed: 2 Warnings: 0
mysql> flush privileges; <--- 적용
flush privileges; 를 하지 않으면 mysql에서 빠져나와서 root 로그인이 안된다.
확인한다.
mysql> select host, user, password from user;
+----------------------------------------------------------------+
| Host user password |
+----------------------------------------------------------------+
| localhost root 2e01146f5c065853 |
| localhost.localdomain root 2e01146f5c065853 |
+----------------------------------------------------------------+

mysql> \q
Bye
------------------------------------------------------------------------------------
[주의]# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
그대는 mysql 을 shutdown 하거나 reload 하면 된다.
# /usr/local/mysql/bin/mysqladmin -u root -p shutdown
하면 패스워드를 묻는데 이때 입력하면 설정한 mysql이 적용이된다.
# /usr/local/mysql/bin/mysqladmin -u root -p reload;
------------------------------------------------------------------------------------

# mysql -u root -p [Enter] // root 패스워드로 로그인
Enter password: ******

※ Mysql 서버에 root 패스워드가 설정되면 이제 부터는 mysql 서버에 접속하기 위해서는
위와 같이 -u 뒤에 root입력하고 -p 옵션을 사용하여 패스워드를 사용한다는 것을 명시해야 한다.
그리고 엔터를 치면 root 패스워드를 입력받기 위해 커서가 멈춘다.
(mysql 명령어만 입력하고 엔터를 치면 패스워드를 묻지 앟고 바로 mysql> 프롬프트가 나온 옛 시절을 생각해 보면 금방 차이를 느낄수 있음)

2. 루트 비번 변경

mysql> use mysql;
mysql> update user set password=password('123456') where user='root';
mysql> flush privileges;

3. root 패스워드를 분실한 경우(응급조치)

mysql을 오랫동안 사용하지 않았을 경우에 간혹 root패스워드가 기억나질않아서 당황할 때가 있습니다. 시스템관리자라면 시스템의 root나 MySQL의 root의 암호를 잊어 버렸을 때를 대비해서 패스워드를 새로 설정하는 방법을 반드시 숙지하고 있어야 할 것입니다.

① 실행중인 msyql 종료

# ps -ef | grep mysqld
root 9567 1 0 Mar16 ? 00:00:00 sh ./mysqld_safe
root 9576 9567 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld
root 9578 9576 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld
root 9579 9578 0 Mar16 ? 00:00:00 /usr/local/mysql/libexec/mysqld

# killall mysqld

② grant-table 미사용모드로 mysql시작(권한 테이블을 사용하지 않는 옵션으로 데몬 실행)

nt일 경우 :
c:\program files\mysql\mysql server 4.1\bin>mysqld-nt --standalone --skip-grant-tables
만약 Error 2003 Hy000 Can't connect to MySQL server on 'localhost' 와 같은 메세지가 나온다면

c:\program files\mysql\mysql server 4.1\bin>mysqld --defaults-file="c:\program files\mysql\mysql server 4.1\my.ini" --consol --skip-grant-tables
따로 프롬프트는 떨어지지 않으므로 새로 cmd창을 열어서 접속해 본다.


# ./safe_mysqld --skip-grant-tables &
[1] 12084
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ./mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.22.24
Type 'help' for help.
mysql>

※ mysqld_safe 명령어는 mysql 데몬을 실행시킨다.

③ update문으로 root사용자 패스워드 갱신

mysql> update user set password=password('123') where user = 'root';
Query OK, 3 rows affected (0.00 sec)
Rows matched: 3 Changed: 3 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
mysql> \q
Bye

④ 실행중인 mysql 다시 종료(권한 테이블을 사용하지 않는 데몬을 종료)

# ps -ef | grep mysqld
root 12084 11558 0 20:10 pts/2 00:00:00 sh ./mysqld_safe --skip-grant-ta
root 12090 12084 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12092 12090 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12093 12092 0 20:10 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
#
# killall mysqld
mysqld daemon ended
[1]+ Done ./mysqld_safe --skip-grant-tables
#

⑤ Mysql 데몬 재 실행 후 갱신된 패스워드로 로그인

# ./safe_mysqld &
[1] 12102
# Starting mysqld daemon with databases from /usr/local/mysql/data
#

# ps -ef | grep mysql
root 12102 11558 0 20:13 pts/2 00:00:00 sh ./mysqld_safe
root 12108 12102 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12110 12108 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld
root 12111 12110 0 20:13 pts/2 00:00:00 /usr/local/mysql/libexec/mysqld

# mysql -u root -p
Enter Password: *************** 


<권한설정>

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)