당신이 MySQL을 동일한 버전으로 다른 DB 서버로 마이그레이션 고려하고 있다면, 당신은 할 수 있습니다 이전 서버에서 새 서버로.rsync
datadir
이것은 InnoDB 파일 레이아웃이나 MyISAM 테이블의 존재 여부에 관계없이 작동합니다.
- ServerA와 동일한 버전의 mysql을 ServerB에 설치
- ServerA
RESET MASTER;
에서 rsycn 프로세스 전에 모든 이진 로그를 지우려면 실행하십시오 . 이진 로깅을 사용하지 않으면이 단계를 건너 뛸 수 있습니다.
- ServerA
SET GLOBAL innodb_max_dirty_pages_pct = 0;
에서 mysql과 약 10 분 동안 실행 합니다 (InnoDB 버퍼 풀에서 더티 페이지를 제거합니다. 또한 mysql 종료를 더 빠르게 수행 할 수 있습니다). 데이터베이스가 모두 MyISAM이면이 단계를 건너 뛸 수 있습니다.
- ServerA의 rsync / var / lib / mysql과 ServerB의 / var / lib / mysql
- rsync가 1 분 미만이 될 때까지 3 단계를 반복하십시오.
service mysql stop
ServerA에서
- 하나 더 rsync를 수행
- scp ServerA : /etc/my.cnf를 ServerB : / etc /로
service mysql start
ServerB에서
service mysql start
ServerA에서 (선택 사항)
본질적으로, 다음은 이러한 스크립트가 원하는 것입니다
mysql -u... -p... -e"RESET MASTER;"
mysql -u... -p... -e"SET GLOBAL innodb_max_dirty_pages_pct = 0;"
RSYNCSTOTRY=10
cd /var/lib/mysql
X=0
while [ ${X} -lt ${RSYNCSTOTRY} ]
do
X=`echo ${X}+1|bc`
rsync -r * targetserver:/var/lib/mysql/.
sleep 60
done
service mysql stop
rsync -r * targetserver:/var/lib/mysql/.
service mysql start
DBA StackExchange의 동료 회원은 mysqlperformanceblog.com의 내용을 FLUSH TABLES WITH READ LOCK;
근거로 멀리 떨어져 있어야한다고 말했습니다.
필자는 중간에 InnoDB 테이블에 대한 SELECT가 FLUSH TABLES WITH READ LOCK;
쓰기가 여전히 어떤 방식 으로든 발생할 수 있음을 읽고 배웠습니다 . Arlukin 의 의견에서 지적했듯이 LVM은 FLUSH TABLES WITH READ LOCK
InnoDB에서 잘 작동 합니다 (댓글은 +1).
모든 비 LVM 사용자의 경우, 모든 MyISAM 데이터베이스를 사용할 수 있습니다 FLUSH TABLES WITH READ LOCK;
. InnoDB의 경우 --single-tranaction
mysqldumps의 사용법을 고수 하십시오.