현재 사용하고 있는 데이터베이스 버전이 4.0.x 버전이다 서버의 케릭터셋은 euc_kr 버전이다
근데 이것을 mysql 버전업을 진행하려고 한다 그럼 마이그레이션 작업을 진행해보자
1. euc_kr -> euckr 버전으로 ( Mysql 5.0.x 버전 )
2. euc_kr -> euckr 버전으로 ( MariaDB 5.5.x 버전 )
3. ecu_kr -> utf8 버전으로 ( Mariadb 10.4.x 버전)
원본서버의 서버O/S 언어 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@localhost ~]# locale LANG=ko_KR.eucKR LC_CTYPE="ko_KR.eucKR" LC_NUMERIC="ko_KR.eucKR" LC_TIME="ko_KR.eucKR" LC_COLLATE="ko_KR.eucKR" LC_MONETARY="ko_KR.eucKR" LC_MESSAGES="ko_KR.eucKR" LC_PAPER="ko_KR.eucKR" LC_NAME="ko_KR.eucKR" LC_ADDRESS="ko_KR.eucKR" LC_TELEPHONE="ko_KR.eucKR" LC_MEASUREMENT="ko_KR.eucKR" LC_IDENTIFICATION="ko_KR.eucKR" LC_ALL=ko_KR.eucKR |
mysql 버전 확인 mysql 4.0.27 / 케릭터셋 : euc_kr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
mysql> \s -------------- Connection id: 1748502 Current database: mysql Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Server version: 4.0.27-log Protocol version: 10 Connection: Localhost via UNIX socket Client characterset: euc_kr Server characterset: euc_kr UNIX socket: /tmp/mysql.sock |
이전할 데이터베이스 데이터 확인 : 데이터베이스명 : xinet_test 이중에 테이블 users 로 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
mysql> use xinet_test; Database changed mysql> select * from users; +-----+-----------+-----------------+----------+------------------------+ | UID | ID | PWD | Name | Address1 | +-----+-----------+-----------------+----------+------------------------+ | 391 | david | sadfn123411234 | 투포환 | 서울동작구사당 | | 392 | dgoo134 | tde7871233r8 | 잔다르 | 전북 전주시 완산읍 | | 394 | addm12134 | 12adf3qfasdfwe | 누구냐 | 광주시 광산구 | | 484 | sososo | rlad124frudxo | 메시 | 경북 울진구 울진읍 | | 485 | hihihi | js0dasf10123 | 호날두 | 부산시 사하구 사하동 | | 486 | uplus | rmadd1sd23fhr47 | 윤택옹 | 제주도 서귀포시 남원읍 | | 487 | sorrent | rkddfa0497 | 고빌구 | 충남 천안시 유성면 | | 465 | test123 | k1asdfdsd2u1331 | 홍길동 | 서울시 종로구 을지로 | | 488 | sksksk | k134aaadjskhs79 | 유산슬 | 서울시 은평구 응암동 | | 489 | ktktkt | enqeasdfadf134n | 진반장 | 경기 광명시 오리로 | | 490 | cshi0000 | kkadfdfdfi97228 | 시골청년 | 서울시 금천구 가산동 | +-----+-----------+-----------------+----------+------------------------+ 11 rows in set (0.00 sec) |
데이터베이스 백업
1 2 |
[root@localhost ~]# mysqldump -u root -p xinet_test > xinet_test_euc_kr.sql Enter password: |
2. 이제 대상서버에서 데이터를 import 진행해보자 대상 서버의 O/S 언어 상태
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@localhost ~]# locale LANG=ko_KR.eucKR LC_CTYPE="ko_KR.eucKR" LC_NUMERIC="ko_KR.eucKR" LC_TIME="ko_KR.eucKR" LC_COLLATE="ko_KR.eucKR" LC_MONETARY="ko_KR.eucKR" LC_MESSAGES="ko_KR.eucKR" LC_PAPER="ko_KR.eucKR" LC_NAME="ko_KR.eucKR" LC_ADDRESS="ko_KR.eucKR" LC_TELEPHONE="ko_KR.eucKR" LC_MEASUREMENT="ko_KR.eucKR" LC_IDENTIFICATION="ko_KR.eucKR" LC_ALL=ko_KR.eucKR |
대상 서버의 Mysql 버전 및 케릭터셋 확인 : Mysql 5.0.77 / 케릭터셋 : euckr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
mysql> \s -------------- Connection id: 63389576 Current database: mysql Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server version: 5.0.77-log Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: euckr Db characterset: euckr Client characterset: euckr Conn. characterset: euckr |
해당 서버에서 이제 데이터베이스를 import 진행 해 보자 ( 데이터베이스는 원본서버에서 데이터 이동)
1 2 |
[root@localhost ~]# mysql --default-character-set=euckr -u root -p xinet_test < xinet_test_euc_kr.sql Enter password: |
정상적으로 import 되었다면 케릭터셋 및 데이터를 확인 해 보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
mysql> show create table users; +-------+--------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-------------------------======================----------------------------------------------------------+ | users | CREATE TABLE `users` ( `UID` int(11) NOT NULL auto_increment, `ID` varchar(12) NOT NULL default '', `PWD` varchar(15) NOT NULL default '', `Name` varchar(15) NOT NULL default '', `Address1` varchar(100) NOT NULL default '', PRIMARY KEY (`UID`) ) ENGINE=MyISAM AUTO_INCREMENT=491 DEFAULT CHARSET=euckr | +-------+----------------------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) 데이터 확인 mysql> select * from users; +-----+-----------+-----------------+----------+------------------------+ | UID | ID | PWD | Name | Address1 | +-----+-----------+-----------------+----------+------------------------+ | 391 | david | sadfn123411234 | 투포환 | 서울동작구사당 | | 392 | dgoo134 | tde7871233r8 | 잔다르 | 전북 전주시 완산읍 | | 394 | addm12134 | 12adf3qfasdfwe | 누구냐 | 광주시 광산구 | | 484 | sososo | rlad124frudxo | 메시 | 경북 울진구 울진읍 | | 485 | hihihi | js0dasf10123 | 호날두 | 부산시 사하구 사하동 | | 486 | uplus | rmadd1sd23fhr47 | 윤택옹 | 제주도 서귀포시 남원읍 | | 487 | sorrent | rkddfa0497 | 고빌구 | 충남 천안시 유성면 | | 465 | test123 | k1asdfdsd2u1331 | 홍길동 | 서울시 종로구 을지로 | | 488 | sksksk | k134aaadjskhs79 | 유산슬 | 서울시 은평구 응암동 | | 489 | ktktkt | enqeasdfadf134n | 진반장 | 경기 광명시 오리로 | | 490 | cshi0000 | kkadfdfdfi97228 | 시골청년 | 서울시 금천구 가산동 | +-----+-----------+-----------------+----------+------------------------+ 11 rows in set (0.00 sec) |
3. 대상 서버의 Mysql 버전 및 케릭터셋 확인 / Mariadb 5.5.42 , 케릭터셋 : euckr
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
MariaDB [mysql]> \s -------------- Connection id: 5207415 Current database: mysql Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 5.5.42-MariaDB-log Source distribution Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: euckr Db characterset: euckr Client characterset: euckr Conn. characterset: euckr ### 데이터베이스 생성 MariaDB [mysql]> create database xinet_test; |
이제 해당 서버에서 데이터를 import 진행해 보자 에러가 발생한다.
1 2 3 |
[root@localhost ~]# mysql -u root -p xinet_test < xinet_test_euc_kr.sql Enter password: ERROR 1064 (42000) at line 11: 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 'TYPE=MyISAM' at line 8 |
해당 에러가 발생하는 이유는 dump 파일을 확인해보면 답이 있다 8번 라인이 실제 문제가 있는게 아니고 18번 라인을 보면 TYPE-MyISAM으로 구성되어 있다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[root@localhost ~]# cat -n xinet_test_euc_kr.sql 1 -- MySQL dump 9.11 2 -- 3 -- Host: localhost Database: xinet_test 4 -- ------------------------------------------------------ 5 -- Server version 4.0.27-log 6 7 -- 8 -- Table structure for table `users` 9 -- 10 11 CREATE TABLE users ( 12 UID int(11) NOT NULL auto_increment, 13 ID varchar(12) NOT NULL default '', 14 PWD varchar(15) NOT NULL default '', 15 Name varchar(15) NOT NULL default '', 16 Address1 varchar(100) NOT NULL default '', 17 PRIMARY KEY (UID) 18 ) TYPE=MyISAM; |
버전업이 되면서 TYPE=MySAM 이 부분을 ENGINE=MyISAM 으로 변경해줘야 한다 간단하게 sed 명령어로 변환하자
1 |
[root@localhost ~]# sed -e 's/TYPE=MyISAM/ENGINE=MyISAM/g' xinet_test_euc_kr.sql > xinet_test_euckr.sql |
이제 다시 데이터베이스를 import 진행하자 진행시 케릭터셋을 euckr로 지정해서 import
1 2 |
[root@localhost ~]# mysql --default-character-set euckr -u root -p xinet_test < xinet_test_euckr.sql Enter password: |
이제 데이터베이스 들어가서 데이터를 확인해 보자 / 정상적으로 들어간 것을 확인 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
MariaDB [xinet_test]> show create database xinet_test; +------------+-----------------------------------------------------------------------------------+ | Database | Create Database | +------------+-----------------------------------------------------------------------------------+ | xinet_test | CREATE DATABASE `xinet_test` /*!40100 DEFAULT CHARACTER SET euckr */ | +------------+-----------------------------------------------------------------------------------+ 1 row in set (0.00 sec) MariaDB [xinet_test]> show create table users; +-------+----------------------------------------------------------------------------------------+ | Table | Create Table | +-------+----------------------------------------------------------------------------------------+ | users | CREATE TABLE `users` ( `UID` int(11) NOT NULL AUTO_INCREMENT, `ID` varchar(12) NOT NULL DEFAULT '', `PWD` varchar(15) NOT NULL DEFAULT '', `Name` varchar(15) NOT NULL DEFAULT '', `Address1` varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (`UID`) ) ENGINE=MyISAM AUTO_INCREMENT=491 DEFAULT CHARSET=euckr ### users 테이블 확인 MariaDB [xinet_test]> select * from users; +-----+-----------+-----------------+----------+------------------------+ | UID | ID | PWD | Name | Address1 | +-----+-----------+-----------------+----------+------------------------+ | 391 | david | sadfn123411234 | 투포환 | 서울동작구사당 | | 392 | dgoo134 | tde7871233r8 | 잔다르 | 전북 전주시 완산읍 | | 394 | addm12134 | 12adf3qfasdfwe | 누구냐 | 광주시 광산구 | | 484 | sososo | rlad124frudxo | 메시 | 경북 울진구 울진읍 | | 485 | hihihi | js0dasf10123 | 호날두 | 부산시 사하구 사하동 | | 486 | uplus | rmadd1sd23fhr47 | 윤택옹 | 제주도 서귀포시 남원읍 | | 487 | sorrent | rkddfa0497 | 고빌구 | 충남 천안시 유성면 | | 465 | test123 | k1asdfdsd2u1331 | 홍길동 | 서울시 종로구 을지로 | | 488 | sksksk | k134aaadjskhs79 | 유산슬 | 서울시 은평구 응암동 | | 489 | ktktkt | enqeasdfadf134n | 진반장 | 경기 광명시 오리로 | | 490 | cshi0000 | kkadfdfdfi97228 | 시골청년 | 서울시 금천구 가산동 | +-----+-----------+-----------------+----------+------------------------+ 11 rows in set (0.00 sec) |
3. 그럼 이제 UTF8 환경으로 데이터를 import 진행해 보자
단 데이터베이스를 import 하기전에 2가지 작업을 진행해줘야 한다 ( TYPE 변경 및 ICONV UTF8로 변경)
현재 서버의 Locale 환경
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@localhost xinet_test]# locale LANG=ko_KR.UTF-8 LC_CTYPE="ko_KR.UTF-8" LC_NUMERIC="ko_KR.UTF-8" LC_TIME="ko_KR.UTF-8" LC_COLLATE="ko_KR.UTF-8" LC_MONETARY="ko_KR.UTF-8" LC_MESSAGES="ko_KR.UTF-8" LC_PAPER="ko_KR.UTF-8" LC_NAME="ko_KR.UTF-8" LC_ADDRESS="ko_KR.UTF-8" LC_TELEPHONE="ko_KR.UTF-8" LC_MEASUREMENT="ko_KR.UTF-8" LC_IDENTIFICATION="ko_KR.UTF-8" |
데이터베이스 버전 확인 및 케릭터 셋 확인
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
MariaDB [(none)]> \s -------------- Connection id: 130 Current database: Current user: root@localhost SSL: Not in use Current pager: stdout Using outfile: '' Using delimiter: ; Server: MariaDB Server version: 10.4.11-MariaDB MariaDB Server Protocol version: 10 Connection: Localhost via UNIX socket Server characterset: utf8 Db characterset: utf8 Client characterset: utf8 Conn. characterset: utf8 |
첫번째 iconv로 utf8 변경 작업
1 |
[root@localhost xinet_test]# iconv -c -f euckr -t utf8 xinet_test_euc_kr.sql > xinet_test_utf8.sql |
두번째 sed 명령어로 TYPE 변경 ( TYPE=MyISAM 이부분이 ENGINE=MyISAM 으로 변경 )
1 |
[root@localhost xinet_test]# sed -e 's/TYPE=MyISAM/ENGINE=MyISAM/g' -i xinet_test_utf8.sql |
이제 사전 작업이 완료되었으니 데이터베이스를 import 진행 해 보자
1 2 |
[root@localhost xinet_test]# mysql -u root -p xinet_test < xinet_test_utf8.sql Enter password: |
정상적으로 데이터베이스가 import 되었다면 확인 해 보자 / 정상적으로 데이터가 들어간것을 확인 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
MariaDB [xinet_test]> show create database xinet_test; +------------+--------------------------------------------------------------------------------+ | Database | Create Database | +------------+---------------------------------------------------------------------+ | xinet_test | CREATE DATABASE `xinet_test` /*!40100 DEFAULT CHARACTER SET utf8 */ | +------------+--------------------------------------------------------------------------------+ MariaDB [xinet_test]> show create table users; +-------+------------------------------------------------------------------------------------+ | Table | Create Table | +-------+------------------------------------------------------------------------------------+ | users | CREATE TABLE `users` ( `UID` int(11) NOT NULL AUTO_INCREMENT, `ID` varchar(12) NOT NULL DEFAULT '', `PWD` varchar(15) NOT NULL DEFAULT '', `Name` varchar(15) NOT NULL DEFAULT '', `Address1` varchar(100) NOT NULL DEFAULT '', PRIMARY KEY (`UID`) ) ENGINE=MyISAM AUTO_INCREMENT=491 DEFAULT CHARSET=utf8 | +-------+-------------------------------------------------------------------------------------+ ### 데이터확인 MariaDB [xinet_test]> select * from users; +-----+-----------+-----------------+--------------+----------------------------------+ | UID | ID | PWD | Name | Address1 | +-----+-----------+-----------------+--------------+----------------------------------+ | 391 | david | sadfn123411234 | 투포환 | 서울동작구사당 | | 392 | dgoo134 | tde7871233r8 | 잔다르 | 전북 전주시 완산읍 | | 394 | addm12134 | 12adf3qfasdfwe | 누구냐 | 광주시 광산구 | | 484 | sososo | rlad124frudxo | 메시 | 경북 울진구 울진읍 | | 485 | hihihi | js0dasf10123 | 호날두 | 부산시 사하구 사하동 | | 486 | uplus | rmadd1sd23fhr47 | 윤택옹 | 제주도 서귀포시 남원읍 | | 487 | sorrent | rkddfa0497 | 고빌구 | 충남 천안시 유성면 | | 465 | test123 | k1asdfdsd2u1331 | 홍길동 | 서울시 종로구 을지로 | | 488 | sksksk | k134aaadjskhs79 | 유산슬 | 서울시 은평구 응암동 | | 489 | ktktkt | enqeasdfadf134n | 진반장 | 경기 광명시 오리로 | | 490 | cshi0000 | kkadfdfdfi97228 | 시골청년 | 서울시 금천구 가산동 | +-----+-----------+-----------------+--------------+----------------------------------+ 11 rows in set (0.001 sec) |