SSHを使用してsql.gz
ファイルをデータベースに挿入したい。私は何をすべきか?
たとえば、名前がnumbers.sql.gz
である電話番号のデータベースがあります。このタイプのファイルとは何ですか。このファイルをデータベースにインポートするにはどうすればよいですか?
このファイルはgzip圧縮(圧縮)SQLファイルであり、ほとんどの場合、拡張子が.sqlのプレーンテキストファイルです。最初に行う必要があるのは、scpを介してデータベースサーバーにファイルをコピーすることです。 PuTTYはpscp.exeだと思います
# Copy it to the server via pscp
C:\> pscp.exe numbers.sql.gz user@serverhostname:/home/user
次に、サーバーにSSHで接続し、gunzip
でファイルを解凍します
user@serverhostname$ gunzip numbers.sql.gz
user@serverhostname$ ls
numbers.sql
最後に、<
入力リダイレクト演算子を使用して、MySQLデータベースにインポートします。
user@serverhostname$ mysql -u mysqluser -p < numbers.sql
Numbers.sqlファイルがデータベースを作成しないが、データベースが既に存在することを予期している場合は、コマンドにもデータベースを含める必要があります。
user@serverhostname$ mysql -u mysqluser -p databasename < numbers.sql
外部からMySQLサーバーに直接接続できる場合は、コピーしてSSHを使用する代わりにローカルのMySQLクライアントを使用できます。その場合、Windowsで.gzファイルを解凍できるユーティリティが必要になります。 7Zipはそうするか、Windowsの場合は gzip/gunzip binaries を入手できると思います。
PuTTYなどのシェルプログラムを使用してサーバーにログインします。
コマンドラインで次のコマンドを入力します
zcat DB_File_Name.sql.gz | mysql -u username -p Target_DB_Name
どこ
DB_File_Name.sql.gz
=インポートするsql.gzファイルのフルパス
username
= mysqlユーザー名
Target_DB_Name
=データベースをインポートするデータベース名
コマンドラインでEnterキーを押すと、パスワードの入力が求められます。 MySQLパスワードを入力します。
できました!
アーカイブを抽出するための別の手順なし:
# import gzipped-mysql dump
gunzip < DUMP_FILE.sql.gz | mysql --user=DB_USER --password DB_NAME
上記のスニペットを使用してmysqldump-backupsを再インポートし、バックアップのために以下を使用します。
# mysqldump and gzip (-9 ≃ highest compression)
mysqldump --user=DB_USER --password DB_NAME | gzip -9 > DUMP_FILE.sql.gz
Linuxまたはcygwinのonelinerの場合、ホストで公開キー認証を行う必要があります。そうしないと、sshがパスワードを要求します。
gunzip -c numbers.sql.gz | ssh user@Host mysql --user=user_name --password=your_password db_name
または、ポート転送を実行し、「ローカル」接続を使用してリモートmysqlに接続します。
ssh -L some_port:Host:local_mysql_port user@Host
次に、ローカルマシンでlocalhost:some_portにmysql接続します。
ポート転送はPuTTYからも機能し、同様の-Lオプションを使用するか、設定パネルからツリーのどこかで設定できます。
Scpがある場合:
ファイルをローカルからリモートに移動するには:
$scp /home/user/file.gz user@ipaddress:path/to/file.gz
ファイルをリモートからローカルに移動するには:
$scp user@ipaddress:path/to/file.gz /home/user/file.gz
リモートシステムにログインせずにmysqlファイルをエクスポートするには:
$mysqldump -h ipaddressofremotehost -Pportnumber -u usernameofmysql -p databasename | gzip -9 > databasename.sql.gz
リモートシステムにログインせずにmysqlファイルをインポートするには:
$gunzip < databasename.sql.gz | mysql -h ipaddressofremotehost -Pportnumber -u usernameofmysql -p
注:リモートホストのIPアドレスへのネットワークアクセスがあることを確認してください
ネットワークアクセスを確認するには:
$ping ipaddressofremotehost
Mysqlダンプが.gzファイルである場合、$ gunzip mysqldump.sql.gzと入力してgunzipでファイルを解凍する必要があります
これにより、.gzファイルが解凍され、mysqldump.sqlが同じ場所に保存されます。
次のコマンドを入力して、SQLデータファイルをインポートします。
$ mysql -u username -p -h localhost test-database <mysqldump.sql password:_
多くのデータベースを持っている場合、インポートしてダンプが大きくなります(マルチギガバイトのGzip圧縮されたダンプで作業することがよくあります)。
ここでは、mysql内でそれを行う方法があります。
$ mkdir databases
$ cd databases
$ scp user@orgin:*.sql.gz . # Here you would just use PuTTY to copy into this dir.
$ mkfifo src
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.41-0
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database db1;
mysql> \! ( zcat db1.sql.gz > src & )
mysql> source src
.
.
mysql> create database db2;
mysql> \! ( zcat db2.sql.gz > src & )
mysql> source src
これが持つ唯一の利点
zcat db1.sql.gz | mysql -u root -p
パスワードを何度も入力せずに複数の操作を簡単に行えるということです。
現在のサーバーでのダンプファイルSQL.gzの作成
$ Sudo apt-get install pigz pv
$ pv | mysqldump --user=<yourdbuser> --password=<yourdbpassword> <currentexistingdbname> --single-transaction --routines --triggers --events --quick --opt -Q --flush-logs --allow-keywords --hex-blob --order-by-primary --skip-comments --skip-disable-keys --skip-add-locks --extended-insert --log-error=/var/log/mysql/<dbname>_backup.log | pigz > /path/to/folder/<dbname>_`date +\%Y\%m\%d_\%H\%M`.sql.gz
オプション:接続のコマンド引数
--Host=127.0.0.1 / localhost / IP Address of the Dump Server
--port=3306
上記で作成したダンプファイルを別のサーバーにインポートする
$ Sudo apt-get install pigz pv
$ zcat /path/to/folder/<dbname>_`date +\%Y\%m\%d_\%H\%M`.sql.gz | pv | mysql --user=<yourdbuser> --password=<yourdbpassword> --database=<yournewdatabasename> --compress --reconnect --unbuffered --net_buffer_length=1048576 --max_allowed_packet=1073741824 --connect_timeout=36000 --line-numbers --wait --init-command="SET GLOBAL net_buffer_length=1048576;SET GLOBAL max_allowed_packet=1073741824;SET FOREIGN_KEY_CHECKS=0;SET UNIQUE_CHECKS = 0;SET AUTOCOMMIT = 1;FLUSH NO_WRITE_TO_BINLOG QUERY CACHE, STATUS, SLOW LOGS, GENERAL LOGS, ERROR LOGS, ENGINE LOGS, BINARY LOGS, LOGS;"
オプション:接続のコマンド引数
--Host=127.0.0.1 / localhost / IP Address of the Import Server
--port=3306
mysql:[警告]コマンドラインインターフェースでパスワードを使用することは安全ではありません。 1.0GiB 00:06:51 [8.05MiB/s] [<=>]
オプションのソフトウェアパッケージは、データベースのSQLファイルをより速くインポートするのに役立ちます
出力の高速圧縮