LinuxサーバーでMySQLデータベース全体を複製することは可能ですか?
エクスポートとインポートを使用できることは知っていますが、元のデータベースは25 MBを超えるため、理想的ではありません。
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コマンドにパイプして、別のデータベースにインポートします。
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]の間にスペースはありません
これは、VincentとPaulsの提案を組み合わせたWindows batファイルです。ユーザーにソース名と宛先名の入力を求めます。
上部の変数を変更して、実行可能ファイル/データベースポートへの適切なパスを設定するだけです。
:: 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!!!
データベースのコピーを作成する
# mysqldump -u root -p password db1 > dump.sql
# mysqladmin -u root -p password create db2
# mysql -u root -p password db2 < dump.sql
これは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
これは、外部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分、新しいDB db2にデータをダンプするのに約3分です。
ホールdbディレクトリ(mysql/data/db1)を直接コピーしてもうまくいきませんでした。InnoDBテーブルがあるためだと思います。