사용자 도구

사이트 도구


freebsd:mysql

MySQL 5.7 설치와 자료 이전

예전에는 한 번 MySQL 5.6 에서 MySQL 5.6으로 옮기는 경우였는데, 그 때에는 옛서버에서 mysql data folder (예를 들어 /var/db/msyql) 전체를 서버에서 서버 문서 복사해서 새로운 서버에서 mysql을 설치해서 기동하면 아주 자연스럽게 돌아갔다.

이번에는 좀 더 일반적인 방법[(사실 예전 방식을 시도 안해본 것은 아니지만, 이유를 알 수 없는 이유로 한 번은 되었다가 또 한 번은 안 되고, 결국 가장 안전한 방법으로 자료이전을 하기로 한다)]으로 새 서버에 MySQL을 새로 설치하고, 그 관련 자료를 예전 서버로부터 이전해 보려고 한다.

옛 서버 쪽: MySQL 5.6 판, 이미 돌아가고 있음
mysqldump -u root -p --databases db1 db2 db3 > /home/dump.sql 

혹은,

mysqldump -u root -p –all-databases > /home/dump.sql
새 서버 쪽: MySQL 5.7 판, 설치한 후에 돌려야 함
cd /usr/ports/database/mysql57-server
make config
make all install clean

설치한 다음에 나오는 중요한 정보

설치후에 나오는 이 중요한 정보는 'pkg info -D -x pkgname (예로 mysql57-server)'하면 다시 볼 수 있다.

여기서 정말 중요한 정보는 설정문서에 대한 정보다.

/usr/local/etc/mysql/my.cnf  

여기에서 datadir=/var/db/mysql 위치를 다른 공간으로, 예를 들면 /mydir/mysql로 변경하려면, 이 '/var/db/mysql'을 다 찾아서 '/mydir/mysql'로 바꿔주면 된다[(vi 에디터에서는 ':%s/\/var\/db\/mysql/\/mydir\/mysql/g' 하면 된다.)]. 아래 설명에서는 기본값인 /var/db/mysql 로 설정한 예를 보여준다.

설치한 다음에 딸려서 설치된 패키지들 청소한 화면

/etc/rc.conf 내용 [(db 폴더 위치는 기본값을 썼다., 이 위치를 변경하고 싶다면 /usr/local/etc/mysql/my.cnf 내용을 변경하면 된다.)]. 5.7 판수에서 중요한 변화는 MySQL 환경변수를 지정하는 설정문서가 만들어져 있다는 거다.

##########  
# MySQL
mysql_enable="YES"

자료초기화하고 MySQL 기동한 후에 자료를 이전한다. 초기화를 할 때 root 비밀번호가 임시로 만들어 진다.

/usr/local/libexec/mysqld --initialize --user=mysql --datadir=/var/db/mysql
 100
 100 200
 100 200
[Warning] InnoDB: New log files created, LSN=45790
 100
[Warning] InnoDB: Creating foreign key constraint system tables.
mysqld: Error on delete of './auto.cnf' (Errcode: 2 - No such file or directory)
[Warning] World-writable config file './auto.cnf' has been removed.
[Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 0ca0253b-4ee1-11eb-b0ab-0125907bb316.
[Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
[Warning] CA certificate ca.pem is self signed.
[Note] A temporary password is generated for root@localhost: hphj!CFAp4>r

자료초기화가 성공적으로 끝나면 다음을 실행한다. 명령어 끝에 '&' 빼먹지 말자!

mysqld_safe --user=mysql --datadir=/var/db/mysql &

서버 기동을 확인하였으면 임시로 받은 root 비밀번호를 본인이 기억하기 쉬운 것으로 바꾸어주면 좋다. 그러고 나서 다음과 같은 명령어로 옛 서버에 있는 자료를 새 서버로 옮겼다. 새로 설치를 하는 경우에는 이런 이전을 할 필요가 없다.

mysql -u root -p < /mnt/dump.sql

그런 다음에 사용자는 다음과 같은 방식으로 일일이 새로 더해주었다[(내 경우에는 사용자 정보를 저장하고 있는 mysql db는 이전하지 않았다)].

msyql -u root -p
use mysql;
create user 'myuser1'@'localhost' identified by 'topseceret';
grant all privileges on mydb1.* to 'myuser1'@'localhost';
flush privileges;
exit;

모든 게 잘 되면 좋지만 잘 안되는 경우를 위해서 참고적으로 두 가지를 더 알아두니 좋았다.

MySQL root 비번 번경 방법

https://dev.mysql.com/doc/refman/5.7/en/resetting-permissions.html 참고.

mysqld_safe --skip-grant-tables --datadir=/var/db/mysql &
mysql
[(none)]use mysql;
[mysql] flush privileges;
[mysql] ALTER USER 'root'@'localhost' identified by 'newtopsecret';
[mysql] flush privileges;
[exit] exit
MySQL 데몬 죽이는 법

https://superuser.com/questions/983969/how-to-kill-mysql-with-moving-pid 참고.

ps aux | grep mysql 

실행 결과를 보니 MySQL이 분명히 돌아가고 있는데, 무슨 pid 파일이 없다면서 MySQL 서버를 새로 시작할 수가 없었다.

pkill mysql

또 한 번은 다음 명령어로 MySQL을 죽였다.

killall -9 mysql
killall -9 mysqld
killall -9 mysqld_safe  
freebsd/mysql.txt · 마지막으로 수정됨: 2021/01/10 19:43 저자 minsookim