mysqlでレプリケーションできなかった理由 bind-address
MySQLでレプリケーションを試していてなぜか、Slaveから接続を試みると
1 |
Apr 20 10:04:21 ubuntu-be02 mysqld[4355]: 090420 10:04:21 [ERROR] Slave I/O thread: error connecting TO master 'repl@192.168.133.200:3306': Error: 'Lost connection to MySQL server at 'reading initial communication packet', system error: 111' errno: 2013 retry-time: 60 retries: 86400 |
syslogに上記ログが出力されていた・・・うまくレプリケーション出来ない。
色々と調べたらMaster側のmy.cnfの設定項目で「bind-address」を設定しているのよくなかったみたい。
これは、TCP接続できるアドレスをかかないといけないみたい。ここがデフォルトでは
1 |
bind-address = 127.0.0.1 |
ローカルホストのみとなっているのでコメントアウトする。
でSlaveをスタートしてみると・・・見事接続成功
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
mysql> SHOW slave STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting FOR master TO send event Master_Host: 192.168.133.200 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 98 Relay_Log_File: mysqld-relay-bin.000006 Relay_Log_Pos: 235 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 98 Relay_Log_Space: 235 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 1 row IN SET (0.00 sec) |
無事、レプリケーションされました。
symfonyでmodelを作成する方法
symfonyでモデル作成する場合は、
まず、「プロジェクトフォルダ/config/schema.yml」を修正します。
で定義するデータベーステーブルの構造を
schema.ymlに設定したら以下のコマンドを実行します。
1 |
symfony propel-build-model |
これで
「プロジェクトフォルダ/lib/model」の中にクラスファイルが自動生成されます。
テーブル定義を修正する場合は、「schema.yml」を修正したのち先ほどのコマンドを実行してORMクラスファイル再作成を行います。
ここでひとつ注意があります。
自動生成されるクラスファイルは
- 「プロジェクトフォルダ/lib/model」
- 「プロジェクトフォルダ/lib/model/om」
2つのフォルダに作成されます。
その中で、omフォルダの中にあるクラスファイルは、自動生成する度にテーブル定義にしたがい再作成されるので修正をしてはいけません。
機能追加する場合はmodelフォルダ直下のファイルを修正するようにしてください。
symfonyのアプリケーションの作成方法
symfonyを使ってアプリを作成するときに最初に行うコマンド実行の手順です。
ちなみにこれはsymfony1.0系のアプリケーションの作成方法です。
- まず、プロジェクトを作成します。
1
symfony init-project プロジェクト名
このコマンドを実行を実行したフォルダがsymfonyのプロジェクトフォルダになります。
- 次に、アプリケーションを作成します。
1
symfony init-app アプリ名
このアプリ名でアプリケーションが作成されます。
- 次にアプリにモジュールを追加します。
アプリケーションを追加しただけではモジュールが無い為、何も動作しません。1
symfony init-module アプリ名 モジュール名
これで対象のアプリケーションにモジュールのスケルトンが作成されます。
これで一通りのスケルトンはできたのであとは実装部分を追加していきます。
作ったプロジェクト名がどれくらい影響するのか情報を収集してみました。
以下の部分に自動設定されていました。
1 2 3 4 |
localhost% grep myprj **/** ~/public_html/myprj config/propel.ini:propel.project = myprj config/propel.ini:propel.database.url = mysql://root@localhost/myprj config/properties.ini: name=myprj |
symfonyでのパラメータの取得方法
symfonyでのパラメータの取得方法です。
nameというリクエストパラメータが送信されてきた場合の値の取得方法です。
- Actionでのパラメータの取得方法
1
$this->name = $this->getRequestParameter('name');
- templateでのパラメータの取得方法
1
<?php echo $sf_params->get('name') ?>
これで、フォーム送信やクエリ文字列のパラメータを取得することができます。