2014年1月1日水曜日

PostgreSQLへのMySQLの:MySQLのDBAは、PostgreSQLのその2を見て

Original post: http://anothermysqldba.blogspot.com/2014/01/a-mysql-dba-looks-at-postgresql-part2.html

だから私は最近投稿: MySQLのDBAは、PostgreSQLのを見て 

この記事はからの移行を検討しますMySQLのにPostgreSQLの 。 私はすぐにそれをフォローアップしますPostgreSQLのバックへの移行MySQLの 。 これらのポストに長期的な目標は、データはそれが生じた場合ときに、各データベースに同じような問題を解決する方法だけでな​​く、異なるデータベース内でどのように機能するかを示すことです。 

:移行のために私は頻繁に使用される例が使用されます世界データベースで利用可能なdev.mysql.comを 。 

私もこれを認めますが、私は、より経験豊富な私はMySQLよりもPostgreSQLが 。 PostgreSQLの DBAが書いて、そのような状況にさまざまなソリューションをお勧めかもしれません。 また、これは非常に単純な例です。 

このプロセスを確実にするために最初の最初から最後までです。 


mysql> create database world;
Query OK, 1 row affected (0.00 sec

# mysql world < world_innodb.sql
mysql> show create table 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',
PRIMARY KEY (`ID`),
KEY `CountryCode` (`CountryCode`),
CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `Country` (`Code`)
) ENGINE=InnoDB

mysql> select count(ID) from City\G
*************************** 1. row ***************************
count(ID): 4079 


だから今私は取得させ、PostgreSQLのデータベースが設定され、準備が整いました。 

# su postgres
$ psql
psql (9.3.2)
Type "help" for help.

postgres=# CREATE DATABASE world;
CREATE DATABASE

# GRANT ALL ON DATABASE world TO testuser;
GRANT 


postgres=# \q 


この単純なPerlスクリプト( mysql2pgsql.perlは )からの移行プロセスを支援するのMySQLへのPostgreSQL 。 


# su testuser
$ cd
$ pwd
/home/testuser
$ wget http://pgfoundry.org/frs/download.php/1535/mysql2pgsql.perl 


収集MySQLのデータを、それを準備。 

mysqldump -u root -p world > mysql2postgresql.sql
$ ./mysql2pgsql.perl mysql2postgresql.sql mysql2postgresql.pgsql
table "city" will be dropped CASCADE
"city_id_seq"--
table "country" will be dropped CASCADE
table "countrylanguage" will be dropped CASCADE

$ psql world < mysql2postgresql.pgsql | more
DROP TABLE
DROP SEQUENCE
CREATE SEQUENCE
CREATE TABLE
INSERT 0 1 

..
0 1を挿入
注意:2他のオブジェクトへのドロップカスケード
詳細:テーブルcountrylanguageにcountrylanguage_countrycode_fkey制約カスケードをドロップ
テーブルの街にcity_countrycode_fkey制約カスケードをドロップ
..
0 1を挿入
0 1を挿入
DROP TABLEの
CREATE TABLEを
0 1を挿入
0 1を挿入
..
0 1を挿入
CREATE INDEXの
ALTER TABLEの


だから私たちは、我々が持っているものを見てみましょう。 


$ psql -d world
psql (9.3.2)
Type "help" for help.

world=> \dt
List of relations
Schema | Name | Type | Owner
--------+-----------------+-------+----------
public | city | table | testuser
public | country | table | testuser
public | countrylanguage | table | testuser
(3 rows) 


市から世界=> SELECT COUNT(ID);
カウント
-------
4079
(1行目)

世界=>市の上限10から選択*;
ID |名前|国番号|地区|人口
---- + ------------------------------------- + ------- ------ + ---------------------- + ------------
1 |カブール| AFG | Kabol |178万
2 |カンダハール| AFG |カンダハール| 237500
3 |ヘラート| AFG |ヘラート| 186800
4 |マザリシャリフ| AFG |バルフ| 127800
5 |アムステルダム| NLD |ホラント| 731200
6 |ロッテルダム| NLD |南ホラント| 593321
7 |ハーグ| NLD |南ホラント| 440900
8 |ユトレヒト| NLD |ユトレヒト| 234323
9 |アイントホーフェン| NLD |北ブラバント| 201843
10 |ティルブルグ| NLD |北ブラバント| 193238
(10行)

世界=> \ DT +市
関係のリスト
スキーマ|名前|タイプ|オーナー|サイズ|説明
-------- + ------ + ------- + ---------- + -------- + ------ -------
公共|街|テーブル| testuserと| 432 MB |
(1行目)


さてカウントが一致し、データが入手可能です。 しかし、今私はMySQLバージョン"ショーはCREATE TABLE」を見たいと思って、であることに注意してくださいMySQLのデータベースを作成し、スキーマを作成、基本的には同じものです。 


$ pg_dump -t city -s world
--
-- PostgreSQL database dump
--

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;

SET search_path = public, pg_catalog;

SET default_tablespace = '';

SET default_with_oids = false;

--
-- Name: city; Type: TABLE; Schema: public; Owner: testuser; Tablespace:
--

CREATE TABLE city (
id integer DEFAULT nextval('city_id_seq'::regclass) NOT NULL,
name character(35) DEFAULT ''::bpchar NOT NULL,
countrycode character(3) DEFAULT ''::bpchar NOT NULL,
district character(20) DEFAULT ''::bpchar NOT NULL,
population integer DEFAULT 0 NOT NULL
);


ALTER TABLE public.city OWNER TO testuser;

--
-- Name: city_pkey; Type: CONSTRAINT; Schema: public; Owner: testuser; Tablespace:
--

ALTER TABLE ONLY city
ADD CONSTRAINT city_pkey PRIMARY KEY (id);


--
-- Name: city_countrycode_idx; Type: INDEX; Schema: public; Owner: testuser; Tablespace:
--

CREATE INDEX city_countrycode_idx ON city USING btree (countrycode);


--
-- PostgreSQL database dump complete
-- 


あなたは表を参照するように見ることができるようにmysqldumpコマンドと同じです 
$ mysqldumpを-UのルートP - NO_DATA - データベースの世界 - テーブル·シティ 
典型的なよりも多くの作業のMySQLは、単にテーブルの構造を見るために使う必要があるために使用されます。 

しかし、我々のデータとスキーマはに上に移動したPostgreSQLのからMySQLを 。 

すぐに来て別のポスト... それを後退。

2013年12月31日火曜日

MySQLのデータベース管理者は、PostgreSQLを見て

Original post: http://anothermysqldba.blogspot.com/2013/12/a-mysql-dba-looks-at-postgresql.html

だから、これは/の旅ですMySQLのに探して、DBA のPostgreSQL 。 それだけの観察と例攻撃ではありません。 

使用してCentOSの6.5 64 -を: 

RPM-IVH http://yum.postgresql.org/9.3/redhat/rhel-6.5-x86_64/pgdg-centos93-9.3-1.noarch.rpm

YUM groupinstall "PostgreSQLデータベースサーバ9.3 PGDG" 
--->パッケージpostgresql93.x86_64 0:9.3.2-1PGDG。RHEL6がインストールされます 
--->パッケージpostgresql93-contrib.x86_64 0:9.3.2-1PGDG。RHEL6がインストールされます 
--->パッケージpostgresql93-libs.x86_64 0:9.3.2-1PGDG。RHEL6がインストールされます 
 
--->パッケージpostgresql93-server.x86_64 0:9.3.2-1PGDG。RHEL6がインストールされます 

YUM postgresql93·サーバーをインストールする 

サービスのpostgresql-9.3 initdbを 
初期化データベース:[OK] 
サービスのpostgresql-9.3スタート 
[OK]:のpostgresql-9.3サービスを開始 
上のpostgresql-9.3をchkconfigの 

以下の例はすべてに基づいているPostgreSQLのウィキ 
#SU - Postgresの 
-BASH-4.1 $のPSQL 
 
PSQL(9.3.2) 

Postgresは=#ユーザtestuserとパスワード設定'1234 'を作成します。 
CREATE ROLEを 
testuserとするスキーマ·テストされているすべてのpostgres =#付与管理; 
GRANT 

Postgresの= testuserとするスキーマ·テスト内のすべてのテーブルに掲示されているすべての#付与管理; 
GRANT 
Postgresの=#\ Q
-BASH-4.1 $出口
ログアウト
#SU testuserと

$ PWD 
/ホーム/ testuserと 
$ psqlの次元のPostgres 
PSQL(9.3.2) 

ヘルプ「ヘルプ」と入力します。 
Postgresは=>テーブルtest.test(COLTEST VARCHAR(20))を作成します。
CREATE TABLEを
Postgresは=> test.test(COLTEST)値( '!それが動作')に挿入;
0 1を挿入
Postgresは=> test.test SELECT * FROM;
COLTEST
-----------
動きます!
(1行目)

Postgresの=>テーブルtest.testをDROP。
DROP TABLEの
Postgresの=>

私はこれらのGRANTステートメントは9.3でうまく働いたことがわかりましたが、ディストリビューションは、もともと8。*バージョンをインストールし、コマンドの一部が失敗しました。 

ところで···もちろん、まだあなたが安定したRDBMシステムに期待される機能を備えています。 付与されたこれらの簡単な例です。 

Postgresの=> test.test SELECT * FROM EXPLAIN; 
クエリ·プラン 
-------------------------------------------------- ------ 
シーケンシャルスキャンテストで(コスト= 0.00 .. 19.20行= 920幅= 58) 

表示データベース== \ Lを 
Postgresの- >の\ L 
Postgresの| postgresの| UTF8 |はen_US.UTF-8 |はen_US.UTF-8 | 
template0に| postgresの| UTF8 |はen_US.UTF-8 |はen_US.UTF-8 | = C / Postgresは+ 
| | | | | postgresの= CTC / Postgresは 
template1に| postgresの| UTF8 |はen_US.UTF-8 |はen_US.UTF-8 | = C / Postgresは+ 

| | | | | postgresの= CTC / Postgresは 

使用することは、標準的なSQLです。 
Postgresの- >使用のPostgres 

すべてのスキーマをリストします。 

Postgresの- > \ DN 
公共| postgresの 

テスト| postgresの 

ショーは、テーブルを作成し、などがもう少し作業です。 付与されたMySQLのDBAは、理由我々がやって使っているものの多くの仕事としてそれが表示されます。 PostgreSQLはMySQLのユーザーがやってするのに使用されるよりも、表領域多くを使用しています。

  Postgresは=>テーブルは連番(somefieldはvarchar(255)、anotherfieldはvarchar(150)、日付フィールド日付)を作成します。 
  CREATE TABLEを 
  Postgresは=>は連番(somefield、anotherfield、日付フィールド)VALUES( 'FUBAR'、 'rabuf'、'2013-12-30 ')内に挿入します。 
  0 1を挿入 
  Postgresは=>(接触'FUBAR'、 'rabuf'、())は連番(somefield、anotherfield、日付フィールド)は値を挿入; 
  0 1を挿入 
  Postgresは=>(接触'fubar2'、 'rabuf2'、())は連番(somefield、anotherfield、日付フィールド)は値を挿入; 
  0 1を挿入 
  Postgresは=>は連番から*を選択します。 
   somefield | anotherfield |日付フィールド   
  ----------- + -------------- + ------------ 
   FUBAR | rabuf | 2013年12月30日 
   FUBAR | rabuf | 2013年12月30日 
   fubar2 | rabuf2 | 2013年12月30日 
  (3行) 

=> SELECT *は連番からsomefieldは= 'FUBAR'のpostgres; somefieldは| anotherfield |日付フィールド----------- + -------------- + ---- -------- FUBAR | rabuf | 2013年12月30日FUBAR | rabuf | 2013年12月30日(2行)

Postgresの=> \? < -ヘルプは、どのようにナビゲートする方法を紹介します。

表示テーブル== \ DT

Postgresの=> \ DT
関係のリスト
スキーマ|名前|タイプ|オーナー
-------- + ----------- + ------- + ----------
公共|連番で|テーブル| testuserと

Postgresの=>は連番[11]のCOLUMN intfield INTをADDのALTER TABLE、ALTER TABLE

連番でからのPostgres => SELECT *; somefield | anotherfield |日付フィールド| intfield ----------- + -------------- + -------- ---- + ---------- FUBAR | rabuf | 2013年12月30日| FUBAR | rabuf | 2013年12月30日| fubar2 | rabuf2 | 2013年12月30日|(3行)

ショーは、テーブルを作成する== \ D +テーブル名
Postgresの=> \ D +連番で
テーブル"public.sometable」
コラム|タイプ|モディファイ|ストレージ|統計対象|説明
-------------- + ------------------------ + ---------- - + ---------- + -------------- + -------------
somefield |キャラクター変化(255)| |拡張| |
anotherfield |キャラクター変化(150)| |拡張| |
日付フィールド|日付| |平野| |
intfield |整数[] | |拡張| |
OIDを持っている:なし


より多くのあなたがpgAdminのをインストールすることができます助けるために
YUM pgadmin3_93をインストールする

仕事にそれを取得し、どのように動作することは別の全体のブログの記事である可能性があります。

これまでのところ.... 私は、MySQLに固執しますが、これはPostgreSQLを使用するだけで単純化した例である。 これはあなた自身のために評価することができますあなたはあなたに始めることができます。

以下の便利なリンク。 彼らは私よりもPostgreSQLのより多くの経験を持っているとして、これらを参照してください。

2013年12月7日土曜日

ERROR 1356(HY000)

Original post: http://anothermysqldba.blogspot.com/2013/12/error-1356-hy000.html

エラー時に来たときに理解する最も重要なことは、少し時間をとってリラックスすることです。 
時々 、人々は、エラー全体を実行し、しどろもどろと欲求不満になる。 深呼吸をしてリラックスしてください。 時々 「 狂気はすべてのことのニーズが少し押しです。重力のようなもの 」と「時々質問は複雑で、答えは簡単です 。 " 

これはすべてについては何ですか? さてたとえば、私は最近、別のDBAに迷惑をした問題の解決に役立つように頼まれた。 何もそのDBAにまったく無礼で意味ないが、ラッシュの人々にあることは単なる見落とし 答え 彼らの前にあり、その代わりに分解スパイラル 狂気 。 

ここでは、状況の一般的な概念である。 

データベースのmysqldumpを実行した後、ユーザーは、テストであることに他の人のために別のデータベースに移動しました。 インポートがうまく働いた。 しかし、ユーザーは、作成済みのビューからクエリしようとした際にエラーが表示され始めた。 

MySQLの> <View_name>制限1から*選択します。 

ERROR 1356(HY000):ビュー'。<DB_NAME>た<Viewname>」参照の無効なテーブル(S)または列(S)または機能(S)またはそれらを使用するビューの欠如権の定義/実行者 

最初の反応は、何かが、インポートと間違っていたと仮定することでした。 ビューをしたか、実際に関連するテーブルが破損? 

いいえ。 

MySQLの>ショービュー<View_Name> \ Gを作成します。このエラーを解決するには、まず最初にTODOをすることでした 

おそらく、このような始まりなものが表示されます。 
*************************** 1。 行*************************** 
閲覧:訪問者 
 
ビューの作成 ​​:CREATEアルゴリズムは不定DEFINER = `<Some_user>` @ `<Some_host_or_IP>` SQLセキュリティのDEFINER拡大表示 

あなたが定義者が誰であるかを参照した後`<Some_user>` @ `<Some_host_or_IP>`は、そのユーザーのために助成金を表示することができます。 

MySQLの> `<Some_user>` @ `<Some_host_or_IP>`を表示:助成金; 

「 ビュー不足権の定義/実行者はそれらを使用する 」:これは、解決策は、エラーが最初の場所で言っただけで何だっ判明 

それは簡単にあなたはそれがすでに動作しているデータベースでshow助成を行い、GRANTステートメントをコピーすることができようにするには、またはあなたが必要なデータを収集するためにビューを有効にするには、新しいデータベースに実装するために必要なアクセス許可はどのようなタイプを確認することができます。 

ユーザーおよびエラーの権限を簡単に更新が消えていた。 

「 時々 、答えは簡単です 。 " 


2013年11月30日土曜日

コミュニティからの戦略

Original post: http://anothermysqldba.blogspot.com/2013/11/a-strategy-from-community.html

私たちは、MariaDBはFedoraやSUSEとRed HatでのMy​​SQLの交換についてのニュースを見てきました。

Oracleは、ニュースについて幸せではないでしょうが、オープンソースコミュニティは、Linuxに実装される「詳細」のオープンソースソリューションに焦点をサポートしています。

我々はすべて見てからMySQLからMariaDBに移動する決定や戦略が可能性が高いだけでは、Red Hat、上部経営者によって行われていなかった、ということです可能性が面白いこと。 これは、はるかにRed Hatが評価され、彼らは耳を傾け、オープンソースコミュニティからの移動である可能性が高い。

バックジャッキーYeaneyの(見てみ、これを考慮@ jackieyeaneyを 」について投稿) は、Red Hatの企業戦略プロセスの民主化 」(掲載11月10日、2011年)およびRed Hatがどのように機能するかを学びます。 オープン私たちの心を保つ " 我々は、オープンソースコミュニティ内の既存のネットワークを活用し、「」とRed Hatの外のアイデアを社会。" コミュニティは、オープン性を求めていましたし、結果は、Red HatがMariaDBへの移行があったことになり、それはおそらくイエスです、私の愚見では、Red Hatのオープン戦略に関連している。

ジム·ホワイトハースト ( JWhitehurst @は、 「与えられた十分な眼球、すべてのバグ:)ではないという理由だけで、それが会社に報酬を与えるだけでなく、それは彼らがどのように動作するか革命をもた らしどのので、戦略的な意思決定を行い、他の人からの入力を取る金融ゲインのオープンソースコミュニティを受け入れるように見える浅い。 "

MySQLには、最後の文を関連付けるために時間を取る。 MySQLをたどる場合bugs.mysql.comサイトでは、あなたは、Oracleが閉じていることをよく知っている(あるいは今ではあまり開いてバージョンを持っている)。 Oracleはそのための独自の企業の推論がありますが、オープンソースコミュニティは、「十分な眼球を考えると、すべてのバグが浅い。」の説明

MariaDBは成長し、さらに関連したバグ追跡がオープンされるデフォルトのDBとしてのLinuxディストリビューションに埋め込まれ、それをバグが長期的にはマリアとMySQL間で分割方法を見て興味深いものになるようになると。

だから今.. MySQLはOracleがまだあるためMariaDBの起こった動きを国有企業や地域社会のバージョンを持っていたが興味深い点です。 オラクルは、Javaや関連OpenJDKのを所有しています。 私はちょうどインチ見て部外者としてこれを求めていながら、.. のJava / OpenJDKのは、Oracleが所有していなかった別のソフトウェアパッケージに分岐した場合、我々はすぐにもレッドハットは、Java / OpenJDKのための交換を参照してくださいだろうか? 再び私は、Javaの世界への部外者ですので、私はちょうどのための類似のそれは、MySQLと表しますようお願いいたします。 

2013年11月19日火曜日

MariaDB&Linuxディストリビューション

Original post: http://anothermysqldba.blogspot.com/2013/11/mariadb-linux-distributions.html

だから今、多くの皆さんのことでグーグル、SUSEおよびRed Hat / Fedoraのではなく、MySQLのデフォルトのデータベースとしてMariaDBへの移行についてのニュースを見てきました。

MariaDBとSkySQLは、今年は非常に生産的なビジネスの動きをした。 これは本当にMySQLのコミュニティと一般的なオープンソースコミュニティのために何を意味するのでしょうか?

スターターは、MySQLはとても人気が作ったものに戻って考えるために? これは、すべてのトップのLinuxディストリビューションで容易に利用可能であった。

オープンソースの焦点移動のプッシュが始まったので、OpenSuseのとFedoraは既にMariaDBに動いている。 デフォルトのデータベースとしてMariaDB持つRHELの移行に続いて、その後もCentOSのはすぐにデフォルトのデータベースとしてMariaDBなければならないことを意味します。

従うことがすぐにそうではUbuntuとDebianのによって動きになります。 私はすでに移動中にニュースを逃したかもしれないが、私はそうは思わない。

このすべてがビッグニュースとMariaDBとオープンソースコミュニティのための動きである。 MariaDBは当然、よりユーザーの受け入れと使用を参照するために開始されます。 OracleのMySQLはまだオープンソースソフトウェアパッケージですが、大きな問題は、MySQLユーザーのバグbugs.mysql.comサイトと追跡されています。 人々はすぐにMariaDBでより多くのバグを追跡するために開始されます?

MariaDBはまた、OracleのMySQLにおける唯一のソリューションが利用できる企業を模倣する、オープンソースの機能を備えています。 だから、多くのユーザーは、当然これらの機能でピックアップしようとしている。

Oracleは、優れた機能とコードを構築していますが、どのように多くの地域では、それを取っている間? MySQLは5.1は重くLinuxディストリビューションと、多くのユーザーが唯一のMySQL 5.1を知っていて、こんなに早くMariaDB 5.5かもしれない使用されるコミュニティで使用されています。

次に何が起こるのだろうか?
まあ何Oracleが行うことを決定すると見られるようにまだ、まだです。 OracleはすでにオラクルのLinux(OEL)を構築するためにRed Hat Linuxを取る。 だから皮肉にも今では、OracleのMySQLのからフォークさMariaDBは、、彼らのOELのために削除するには、Oracle用のRed Hat Linuxになります。 Oracleは、いくつかの方法でJavaと反撃のでしょうか?

Perconaは何をしますか? Perconaもこの中でプレイヤーであると長年にわたってMariaDBとOracleとの尊重の関係を持っていた。 それがどんな動きはPerconaの一部で発生しているかどうかを好奇心旺盛になりますので、当然のことながら、Perconaは物事のオープンソースの側に向かって無駄のない。 多くのツールはすぐになってMariaDBの機能に焦点を当てたのだろうか?

MariaDB何をしますか? まあ、のバグの成長率を監視MariaDBバグデータベースには MariaDBを取るし始めているどのように多くの人々を示して助ける。
マリアは、ある時点で、MySQLのソースコードの更新から脱却し、ちょうど社会とそのエンジニアとビルドを続けるのだろうか?

だから、次に何が起こる? 我々は知らない。 これは、オープンソースコミュニティに任されています。 怒りの声の多くは長年にわたってオラクルに向けられていた。 だから、どのようにそれらの声はすぐに見られるようになりますを変更したり、MariaDBのサポートを示してください。 それらの多くは、おそらく既にMariaDBサポートしていますが、それはMariaDBは、MySQLに関してで行う方法も示します大衆の採用である。 多くの企業が名をMySQLの知っていると(これは先日私に起こった。)MariaDBに移動することをためらうようになります。 だからMariaDBの仕事はまだ終わっていません。
そして、まだこのすべての後に... オラクル、レッドハットとGoogleはまだするために一緒に来る私たちの政府を支援する 。