전체 MySQL 데이터베이스 복제
Linux 서버에서 MySQL 데이터베이스 전체를 복제할 수 있습니까?
내보내기 및 Import를 사용할 수 있다는 것은 알지만 원래 데이터베이스가 25MB를 초과하기 때문에 이상적이지 않습니다.
mysqldump를 사용하거나 데이터베이스 파일을 직접 복제할 수 있습니까?
먼저 중복 데이터베이스를 만듭니다.
CREATE DATABASE duplicateddb;
사용자와 권한이 모두 갖추어져 있는지 확인하고 다음을 수행합니다.
mysqldump -u admin -p originaldb | mysql -u backup -pPassword duplicateddb;
리모트 서버에
mysqldump mydbname | ssh host2 "mysql mydbcopy"
로컬 서버에
mysqldump mydbname | mysql mydbcopy
mysqldump를 실행하여 출력을 다른 mysql 명령어로 파이핑하여 다른 데이터베이스로 Import할 수 있습니다.
mysqldump --add-drop-table -u wordpress -p wordpress | mysql -u wordpress -p wordpress_backup
데이터가 있는 시스템에 mysqldump 파일을 만들고 파이프를 사용하여 이 mysqldump 파일을 새 시스템에 대한 입력으로 제공합니다.새 시스템은 ssh 명령을 사용하여 연결할 수 있습니다.
mysqldump -u user -p'password' db-name | ssh user@some_far_place.com mysql -u user -p'password' db-name
-p[password] 사이에 공백이 없습니다.
데이터베이스 복사 작성
# mysqldump -u root -p password db1 > dump.sql
# mysqladmin -u root -p password create db2
# mysql -u root -p password db2 < dump.sql
여기 빈센트와 폴스의 제안을 합친 윈도우 배트 파일이 있습니다.유저에게 송신원 및 행선지명을 입력하도록 요구됩니다.
맨 위의 변수를 수정하여 실행 파일/데이터베이스 포트에 대한 올바른 경로를 설정하기만 하면 됩니다.
:: Creates a copy of a database with a different name.
:: User is prompted for Src and destination name.
:: Fair Warning: passwords are passed in on the cmd line, modify the script with -p instead if security is an issue.
:: Uncomment the rem'd out lines if you want script to prompt for database username, password, etc.
:: See also: http://stackoverflow.com/questions/1887964/duplicate-entire-mysql-database
@set MYSQL_HOME="C:\sugarcrm\mysql\bin"
@set mysqldump_exec=%MYSQL_HOME%\mysqldump
@set mysql_exec=%MYSQL_HOME%\mysql
@set SRC_PORT=3306
@set DEST_PORT=3306
@set USERNAME=TODO_USERNAME
@set PASSWORD=TODO_PASSWORD
:: COMMENT any of the 4 lines below if you don't want to be prompted for these each time and use defaults above.
@SET /p USERNAME=Enter database username:
@SET /p PASSWORD=Enter database password:
@SET /p SRC_PORT=Enter SRC database port (usually 3306):
@SET /p DEST_PORT=Enter DEST database port:
%MYSQL_HOME%\mysql --user=%USERNAME% --password=%PASSWORD% --port=%DEST_PORT% --execute="show databases;"
@IF NOT "%ERRORLEVEL%" == "0" GOTO ExitScript
@SET /p SRC_DB=What is the name of the SRC Database:
@SET /p DEST_DB=What is the name for the destination database (that will be created):
%mysql_exec% --user=%USERNAME% --password=%PASSWORD% --port=%DEST_PORT% --execute="create database %DEST_DB%;"
%mysqldump_exec% --add-drop-table --user=%USERNAME% --password=%PASSWORD% --port=%SRC_PORT% %SRC_DB% | %mysql_exec% --user=%USERNAME% --password=%PASSWORD% --port=%DEST_PORT% %DEST_DB%
@echo SUCCESSFUL!!!
@GOTO ExitSuccess
:ExitScript
@echo "Failed to copy database"
:ExitSuccess
샘플 출력:
C:\sugarcrm_backups\SCRIPTS>copy_db.bat
Enter database username: root
Enter database password: MyPassword
Enter SRC database port (usually 3306): 3308
Enter DEST database port: 3308
C:\sugarcrm_backups\SCRIPTS>"C:\sugarcrm\mysql\bin"\mysql --user=root --password=MyPassword --port=3308 --execute="show databases;"
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sugarcrm_550_pro |
| sugarcrm_550_ce |
| sugarcrm_640_pro |
| sugarcrm_640_ce |
+--------------------+
What is the name of the SRC Database: sugarcrm
What is the name for the destination database (that will be created): sugarcrm_640_ce
C:\sugarcrm_backups\SCRIPTS>"C:\sugarcrm\mysql\bin"\mysql --user=root --password=MyPassword --port=3308 --execute="create database sugarcrm_640_ce;"
C:\sugarcrm_backups\SCRIPTS>"C:\sugarcrm\mysql\bin"\mysqldump --add-drop-table --user=root --password=MyPassword --port=3308 sugarcrm | "C:\sugarcrm\mysql\bin"\mysql --user=root --password=MyPassword --port=3308 sugarcrm_640_ce
SUCCESSFUL!!!
InnoDB에서는 안 돼요.이 회피책은 MyISAM 데이터베이스를 복사하려는 경우에만 사용하십시오.
백업 중에 테이블을 잠그고 데이터베이스 가져오기 중에 MySQL을 일시 중지하는 것이 허용될 경우 mysqlhotcopy가 더 빨리 작동할 수 있습니다.
예.
백업:
# mysqlhotcopy -u root -p password db_name /path/to/backup/directory
복원:
cp /path/to/backup/directory/* /var/lib/mysql/db_name
mysqlhotcopy는 SSH(scp)를 통해 파일을 전송할 수도 있습니다.또한 중복 데이터베이스 디렉토리로 직접 전송할 수도 있습니다.
예.
# mysqlhotcopy -u root -p password db_name /var/lib/mysql/duplicate_db_name
이것은 OUTSIDE mysql 쉘에서 명령 프롬프트로 동작했습니다.
# mysqldump -u root -p password db1 > dump.sql
# mysqladmin -u root -p password create db2
# mysql -u root -p password db2 < dump.sql
이게 가장 좋은 방법인 것 같아요."dump.sql"을 압축하면 압축 백업으로 저장할 수 있습니다.훌륭합니다! Innodb 테이블이 있는 1GB 데이터베이스의 경우 "dump.sql"을 생성하는 데 약 1분, 새 DB2에 데이터를 덤프하는 데 약 3분이 걸립니다.
홀 DB 디렉토리(mysql/data/db1)를 스트레이트 복사하는 것은 InnoDB 테이블 때문에 효과가 없었던 것 같습니다.
나는 다음 코드 행이 효과가 있었다.
mysqldump --quote-names -q -u username1 --password='password1' originalDB | mysql -u username2 --password='password2' duplicateDB
옛날 MySQL에서 모든 테이블파일을 mysql 트리의 다른 디렉토리에 복사할 수 있었습니다.
mysql cli - 데이터베이스 db2 작성
Linux cli - cp db1 db2
언급URL : https://stackoverflow.com/questions/1887964/duplicate-entire-mysql-database
'programing' 카테고리의 다른 글
클래스 내에서 정적 메서드를 호출할 수 있습니까? (0) | 2023.01.14 |
---|---|
멀티레벨 어레이를 사람이 읽을 수 있는 형식으로 출력하려면 어떻게 해야 합니까? (0) | 2023.01.14 |
최대 절전 모드에서 생성된 DDL의 구문 오류 "type= MyISAM"이 잘못되었습니다. (0) | 2023.01.14 |
유사한 데이터를 올바른 방법으로 표를 만드는 방법 (0) | 2023.01.14 |
문자열이 비어 있는지 확인하는 함수가 항상 true를 반환하는 이유는 무엇입니까? (0) | 2023.01.14 |