このセクションの情報は,UnixとWindowsのプラットフォームで実行されるMySQL集群に適用されます。
MySQL集群内のデータベースデーブルおよびデータの操作は,標準のMySQLの場合とほとんど違いはありません。留意すべき重要なポ操作系统管理员ントが2操作系统管理员あります。
クラスタ内でレプリケトされるテブルでは,
NDBCLUSTER
ストレジエンジンを使用する必要があります。これを指定するには,テブルの作成時に引擎= NDBCLUSTER
または引擎= NDB
オプションを使用します。创建表tbl_name(col_namecolumn_definitions)引擎= NDBCLUSTER;
または,異なるストレジエンジンを使用する既存のテブルに対して
ALTER TABLE
を使用して,NDBCLUSTER
を使用するようにテブルを変更します。ALTER TABLEtbl_name引擎= NDBCLUSTER;
すべての
NDBCLUSTER
テブルには主キがあります。テブルの作成時にユザが主キを定義しなかった場合は,NDBCLUSTER
ストレージエンジンが隠し主キーを自動的に生成します。このようなキーは,ほかのテーブルインデックスと同じサイズの領域を占有します。(これらの自動的に作成されるインデックスを格納する十分なメモリーがないために問題が発生することは,珍しくありません)。
, mysqldumpの出力を使用して既存のデータベースからテーブルをインポートする場合は,SQLスクリプトをテキストエディタで開いて,テーブル作成ステートメントに引擎
オプションを追加するか,既存の引擎
オプションを置き換えることができます。MySQL集群をサポトしない別のMySQLサ世界
サンプルデタベスがあり,城市
テブルをエクスポトする必要があるとします。
shell> mysqldump——add-drop-table world City > city_table.sql
この結果作成されるcity_table.sql
ファイルには,このテーブル作成ステートメント(およびテーブルデータをインポートするために必要な插入
ステトメント)が格納されます。
删除表如果存在' City ';CREATE TABLE ' City ' (' ID ' int(11) NOT NULL auto_increment, ' Name ' char(35) NOT NULL default ", ' CountryCode ' char(3) NOT NULL default ", ' District ' char(20) NOT NULL default ", ' Population ' int(11) NOT NULL default '0',主键(' ID ')) ENGINE=MyISAM default CHARSET=latin1;INSERT INTO ' City ' VALUES(1,'喀布尔','AFG','喀布尔',1780000);INSERT INTO ' City ' VALUES (2,'Qandahar','AFG','Qandahar',237500);INSERT INTO ' City ' VALUES (3,'Herat','AFG','Herat',186800);(省略其余INSERT语句)
MySQLがこのテブルに対してNDBCLUSTER
ストレジエンジンを使用するか確認する必要があります。これを行うには2の方法があります。1つは、テーブル定義をクラスタデータベースにインポートする前に変更することです。例として城市
テブルを使用し,定義の引擎
オプションを次のように変更します。
删除表如果存在' City ';CREATE TABLE ' City ' (' ID ' int(11) NOT NULL auto_increment, ' Name ' char(35) NOT NULL default ", ' CountryCode ' char(3) NOT NULL default ", ' District ' char(20) NOT NULL default ", ' Population ' int(11) NOT NULL default '0',主键(' ID ')) ENGINE=NDBCLUSTER default CHARSET=latin1;INSERT INTO ' City ' VALUES(1,'喀布尔','AFG','喀布尔',1780000);INSERT INTO ' City ' VALUES (2,'Qandahar','AFG','Qandahar',237500);INSERT INTO ' City ' VALUES (3,'Herat','AFG','Herat',186800);(省略其余INSERT语句)
クラスタ化されたデタベスの一部になる個々のテブルの定義で,これを行う必要があります。これを行うもっとも簡単な方法は,定義を含むファ类型=
またはengine_name
引擎=
のすべての邮箱ンスタンスをengine_name
引擎= NDBCLUSTER
に置換することです。ファopenstackルを変更したくない場合は,変更していないファopenstackルを使用してテopenstackブルを作成してから,ALTER TABLE
を使用してストレジエンジンを変更します。詳細はこのセクションで後述します。
クラスタのSQLノドで世界
という名前のデタベスがすでに作成されていることを前提に,mysqlコマンド行クラ邮箱アントを使用してcity_table.sql
を読み取り,対応するテブルを通常の方法で作成して移入します。
Shell > mysql world < city_table.sql
非常に重要な留意点として,前述のコマンドはSQLノードを実行しているホスト(この場合は,IPアドレスが192.168.0.20
のマシン)で実行する必要があります。
SQLノドで世界
デタベス全体のコピを作成するには,非クラスタサで, mysqldumpを使用して,(たとえば)/ tmp
ディレクトリのworld.sql
という名前のファ。次に,前述のとおりにテーブル定義を変更し,このようにファイルをクラスタのSQLノードにインポートします。
Shell > mysql world < /tmp/world.sql
ファルを別の場所に保存する場合は,それに合わせて前述の手順を調整してください。
SQLノドでの选择
クエリの実行は,MySQLサ。コマンド行からクエリを実行するには,最初に通常の方法で(输入密码:
プロンプトで根
パスワドを指定して)MySQL Monitorにログンする必要があります。
shell> mysql -u root -p Enter password: Welcome to the mysql monitor。命令以;或\ g。您的MySQL连接id是1到服务器版本:5.6.22 db-7.4.4输入'help;'或'\h'帮助。输入'\c'清除缓冲区。mysql >
ここでは,MySQLサバの根
アカウントを使用し,MySQLサ根
パスワドの設定を含む)に従っていると仮定します。詳細は,セクション2.10.2 "最初のMySQLアカウントのセキュリティ設定"を参照してください。
クラスタノドが相互にアクセスするときはMySQLの権限システムが利用されないことを考慮に入れてください。MySQLユザアカウント(根
アカウントを含む)の設定または変更は,SQLノードにアクセスするアプリケーションにのみ影響し,ノード間のやり取りには影響しません。詳細は,セクション18.5.11.2 " MySQL集群とMySQL権限"を参照してください。
SQLスクリプトをンポトする前にテブル定義の引擎
句を変更しなかった場合は,この時点で次のステトメントを実行してください。
mysql >使用世界;mysql>修改表城市引擎=NDBCLUSTER;修改NDBCLUSTER表的Country ENGINE表修改表的CountryLanguage ENGINE=NDBCLUSTER;
デタベスの選択とそのデ选择クエリの実行も,MySQL Monitorの終了と同様に通常の方法で行います。
mysql >使用世界;mysql> SELECT Name, Population FROM City ORDER BY Population DESC LIMIT+-----------+------------+ | 名字|人口 | +-----------+------------+ | 首尔孟买| 10500000 | | | 9981619 | |圣保罗| 9968485 | | 9696300 | |上海雅加达| | 9604900 | +-----------+------------+ 5行集(0.34秒)mysql > \问再见壳>
MySQLを使用するアプリケションは,標準のAPIを使用してNDB
テブルにアクセスできます。アプリケションは,管理ノ,sqlノ。この簡単な例では、ネットワク上の別の場所にあるWebサPHPXのmysqli
拡張を使用して,ここに示す选择
ステトメントを実行する方法を示しています。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> < HTML > SIMPLE mysqli SELECT
$link = new mysqli('192.168.0.20', 'root', ' ')root_password”、“世界”);mysqli构造函数的#参数是:# host, user, password, database if(mysqli_connect_errno()) die(“连接失败:”。mysqli_connect_error ());$query = "SELECT Name, Population BY Population DESC LIMIT 5";# if no errors…if($result = $link->query($query)) {?> City Population #然后显示结果…而(行=结果美元- > fetch_object ()) printf (" < tr > \ n < td对齐= \ \“中心”> % s < / td > < td > % d < / td > \ n < / tr > \ n”,行- >名称、行- >人口);?> #……and verify the number of rows that were retrieved printf("Affected rows: %d
\n", $link->affected_rows); } else # otherwise, tell us what went wrong echo mysqli_error(); # free the result set and the mysqli connection object $result->close(); $link->close(); ?>