3つの命令にmysqlのテーブル+付与権限をコピーするには、3つの方法

すぐにテーブルをコピーする方法

まず、テーブルdb1.t 1000を作成し、テーブルと同じ構造を作成し、行を挿入db2.t

今のガイドのうち> 900内の行をdb1.tする必要がある、と仮定し、db2.tに挿入され、

mysqldumpをする方法

いくつかの重要なパラメータの注意事項:

  • -シングル・トランザクション・データをエクスポートする際に、追加のテーブルロックテーブルdb1.tを必要としない役割が、使用
    一貫したスナップショット方式でのSTART TRANSACTION;
  • -no-作成-情報テーブル構造をエクスポートする必要はありません意味。
  • -resultファイルは、ファイルがクライアントマシンにクライアントを表すために生成された出力ファイルへのパスを指定します。

エクスポートcsvファイル

select * from db1.t where a>900 into outfile '/server_tmp/t.csv';

この文は、サーバー側での結果を保存します。あなたが同じマシン上にないクライアントとMySQLサーバのコマンドを実行すると、クライアントマシン上の一時ディレクトリはt.csvファイルを生成するつもりはありません。

このコマンドを使用すると、このファイルが存在しない、または文が実行されたときので、同じ名前のファイルやエラーの存在になります/server_tmp/t.csv確認する必要がありますので、ファイルを上書きするお手伝いをしません。

.csvファイルをエクスポート取得した後、あなたは、次のコマンドを使用して、負荷データにおけるターゲット表db2.tにデータをインポートすることができます。

load data infile '/server_tmp/t.csv' into table db2.t;
  1. 記録の間のセパレータとしてオープンされたファイルのフィールド間の区切り文字としてタブ(\ tの)によって/server_tmp/t.csv、改行(\ n)は、データを読み出します。
  2. トランザクションを開始します。
  3. 各行のフィールドの数を決定することは、同じテーブルdb2.tあります。
    • 同じでない場合は、直接のエラーは、トランザクションがロールバックされます。
    • はい、行に設定されている場合、InnoDBのエンジンインターフェースコールは、テーブルに書き込まれます。
  4. ステップ3を繰り返し完成されたファイル全体を読み込む/server_tmp/t.csvまで、トランザクションがコミットされます。

メソッドの物理コピー

そしてmysqldumpをCSVファイルの導出方法は、データの論理的なアプローチになっており、データはテーブルdb1.t、テキストの世代から読み出され、その後、宛先表db2.t.に書き込まれます 物理的なデータは、道を導きますか?たとえば、テーブルに直接.frmファイルをコピーし、実行可能な、db2ディレクトリーにdb1.tファイルをの.ibd?答えは受け入れられません。

InnoDBのテーブル、ので、これらの2つの物理ファイルを含むことに加えて、データ・ディクショナリに登録する必要があります。直接コピー文書、データテーブルdb2.t辞書にない、システムは、その識別情報を受け付けないので、両方。

MySQLでは、テーブルスペース(トランスポータブル表)を送信する方法を導入し5.6バージョンを導入+表領域、テーブルの機能物理コピーの方法によって導出することができます。

今DB1ライブラリ、テーブルt rのテーブルと同一のコピー、特定の実装手順を目指しているとします。

  1. 実行Tのようなテーブルrを作成し、同じテーブル構造の空のテーブルを作成し、
  2. ALTER TABLE rを破棄表領域を実行し、この時間r.ibdファイルが削除されます
  3. この時点では輸出用の実行フラッシュテーブルtはt.cfgを生成します。
  4. DB1ディレクトリのcp t.cfgのr.cfgで行われる。CP t.ibd r.ibd、これらの2つのコマンドは、
  5. 実行テーブルのロックを解除し、この時間t.cfgファイルが削除されます。
  6. データコンテンツので、ALTERテーブルRインポート表領域、新しい表領域テーブルRとしてこのr.ibdファイルを実行し、この文書をt.ibdは同じであるので、テーブルとテーブルrは、tが同じデータを持っています。

3つの方法の長所と短所

  1. 特に大規模なコピー用紙のための物理的な最速のコピー方法は、最速の方法です。しかし、それは完全なコピーでなければならない、コピーは、ユーザーがデータベースホストのログを記録できない場合に使用することはできません、あなたがサーバーにデータをコピーする必要があるの一部にすることはできませんし、ソースとターゲットのテーブルがInnoDBのエンジンでなければなりません。

  2. この方法は、mysqldumpをINSERT文でファイルを生成することを含む、フィルタパラメータは、データの一部のみ輸出を達成するための条件に増加させることができます。この方法の1つの欠点は、あなたがこのような複雑な条件の文言をJOINを使用することができないということです。

  3. OUTFILE方法が最も柔軟性があるに選択して...、すべてのSQLの書き込みをサポートしています。しかし、この方法の欠点は、あなただけのテーブルにデータをエクスポートすることができ、およびテーブル構造はまた、個別にバックアップの追加文を必要とすることです。

    後者の二つは、エンジンを横切って、論理バックアップです。

グローバル権限をのmysql

  • SELECT * FROM MYSQL.USER WHERE USER='UA'\G 显示所有权限
  • 範囲全体のMySQL、ユーザテーブルに格納されているMySQLの情報

  • これは、UAユーザーに最高の権威を与えます:

    • grant all privileges on *.* to 'ua'@'%' with grant option;
  • 助成金は、二つの動作のためのコマンド:それぞれmysql.userディスクテーブルは、フィールドY、および修正値「すべて1」をアクセスし、対応するオブジェクトACL_USERユーザメモリを変更する権限を持っています

  • ユーザー名UAログインに成功した新しいクライアントは、mysqlは新しい接続のためのスレッドオブジェクトを保持している場合、グローバルアクセス権に関するすべての判断は、直接内部のスレッドオブジェクトの許可ビットを保存しています。

    • グローバル補助金のコマンドの権限については、対応するディスクとメモリを更新し、その後、新たに作成された接続は、新たな権限を使用します。
    • 接続にはすでに存在している、それは許可のグローバル補助金の影響を受けていません。
  • あなたは上記の権限を回復したい場合は:

    • revoke all privileges on *.* from 'ua'@'%';
      二つの動作は、ビットN変性された変性ビット0のアクセス許可フィールドディスク、メモリ内のオブジェクトの値に対応しています。

MySQLdb権

grant all privileges on db1.* to 'ua'@'%' with grant option;

WHERE USER =「UA」\ Gデシベルの権限、現在のユーザーを表示し、同じでも、ディスクとメモリ内のオブジェクトにアクセス許可を変更するMYSQL.DBからの利用SELECT *。

DBの権限は、テーブルmysql.dbに格納されています

注意:およびグローバル権限異なるインパクトDB接続オブジェクトの権限は、すでに存在している場合があります。

MySQLのテーブルとカラムの権限権限

mysql.tables_priv表権限、mysql.columns_privに格納されたカラムのパーミッション、メモリ構造column_priv_hashに格納されたハッシュの権限これらの2つのタイプの組み合わせ。

各時間は、データシートを修正する2つの助成金の許可に似た権限を持つDB、同期がメモリ内のハッシュ構造を変更されるため、権限のこれら2つのタイプの操作は、既存の接続に影響を与えます。

フラッシュ権限の使用シナリオ

言及したいくつかの文書は、有効にする声明をエンパワーするために、すぐに付与した後、コマンドフラッシュ権限を実行します。実際には、それがデータテーブルに特権のための時間だと言って、より正確なフラッシュの特権文が一貫性のある状態を達成するために、データ・メモリを再構築するために使用することができ、メモリ内のデータの権利と矛盾しています。

  • データテーブルのレコードがないので、例えば、記録されたデータテーブルを削除するための時間が、そこにデータの記憶は、利用者のエンパワーメントにつながるが、失敗します。
  • 再作成し、ユーザが動作しません。同時に、メモリの判決で、ユーザーはあると思いますので。

おすすめ

転載: www.cnblogs.com/jimmyhe/p/11220664.html