Midnightjapan

Tag: mysql

MySQL AUTO_INCREMENTを下げる

by jun on 7月.04, 2016, under Mysql, Programing

MySQL 5.5.48ストレージエンジンはInnoDBにてAuto_Increment値を上にあげるのは
mysql > show table status like ‘テーブル名’\G
mysql > ALTER TABLE テーブル名 AUTO_INCREMENT = 50000;
などで変更される。今回はたまたま1から256まで入っていたデータ移行は10000以上にしようとAuto_Increment値をあげておいたデータに対して、10000以上のデータは消して257から入れたい!と思ったときにこうしました。
mysql > ALTER TABLE テーブル名 AUTO_INCREMENT = 257;
実行上はOKとでるので調べてみると
*************************** 1. row ***************************
Name: テーブル名
Engine: InnoDB
Version: 10
Row_format: Compact
Rows: 1103
Avg_row_length: 2391
Data_length: 2637824
Max_data_length: 0
Index_length: 1474560
Data_free: 72351744
Auto_increment: 32687
Create_time: 2016-07-04 12:19:54
Update_time: NULL
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment:
1 row in set (0.02 sec)
と、まったくかわっていません。MySQLでは最大値+1以外の設定はできないそうです。
そこで10000以上のコンテンツはdeleteしました。
これでデータ上でもmax(id)は257になっています。
ここで以下を実行してみると
mysql > ALTER TABLE テーブル名 AUTO_INCREMENT = 257;
やはりかわりません。
答えはこうです。
mysql > ALTER TABLE テーブル名 AUTO_INCREMENT = 1;
こうすると最大値+1を計算してくれるようです。
要するにAUTO_INCREMENT値のリセットを行ったようです。

コメントなし :, more...

Heartbeatのリソース解放方法

by jun on 1月.22, 2011, under Linux, Mysql, Programing

WEB DBシステムを開発中のJUNです。
こんばんわ。

世間から隔離されてはや2週間、皆様いかがおすごしですか?
さて、表題の件ですがこんな問題が発生しました。

MySQLサーバーのデータベースをコールドバックアップの手法でデータの入れ替えを行いました。

理由は単純で、MySQLサーバーのデータを社内の試験サーバーで開発し定期的に進捗報告を行うため、簡単に言うと提出するわけです。

そんなわけで、なれた手つきで試験サーバーデータを送信して、本サーバーに。

本サーバーでMySQLを停止します。

# /etc/rc.d/init.d/mysql stop
# MySQL を停止中:                                            [  OK  ]

OKかと思いきや、しまったHeartbeatでフェイルオーバーするぞ!

と思ったら

# crm_mon
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode

============
Last updated: Sat Jan 22 18:54:08 2011
Current DC: main.pokepoke.lan (***)
2 Nodes configured.
1 Resources configured.
============

Node: main.pokepoke.lan (****): online
Node: sub.pokepoke.lan (******): online

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started main.pokepoke.lan
    MailTo_2    (heartbeat::ocf:MailTo):        Started main.pokepoke.lan
    drbddisk_3  (heartbeat:drbddisk):   Started main.pokepoke.lan
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started main.pokepoke.lan
    httpd_5     (lsb:httpd):    Started main.pokepoke.lan
    mysqld_6    (lsb:mysqld):   Started main.pokepoke.lan (unmanaged) FAILED

Failed actions:
    mysqld_6_stop_0 (node=main.pokepoke.lan, call=39, rc=1): Error

ふむ・・・これは・・・ログやら調べてみると、heartbeatがリソースの障害を検知してフェールオーバを実行しようとしたとき、管理下のリソースを停止させようとしたけれども、停止させようとしたリソースの停止要求がタイムアウトしたらしい。

そりゃ止めてるからね。

そんなわけでheartbeatはそのリソースをUnmanagedとしてマークする。

これを解放するための方法を記録する。

# crm_resource -H main.pokepoke.lan -r mysqld_6 -C

これは「 crm_resource -H <ホスト名> -r <リソース名> -C 」と解釈してください。

数秒でカリカリ終わったので、確認してみると。

# crm_mon
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode

============
Last updated: Sat Jan 22 18:56:18 2011
Current DC: main.pokepoke.lan (***)
2 Nodes configured.
1 Resources configured.
============

Node: main.pokepoke.lan (****): online
Node: sub.pokepoke.lan (******): online

Resource Group: group_1
    IPaddr2_1   (heartbeat::ocf:IPaddr2):       Started main.pokepoke.lan
    MailTo_2    (heartbeat::ocf:MailTo):        Started main.pokepoke.lan
    drbddisk_3  (heartbeat:drbddisk):   Started main.pokepoke.lan
    Filesystem_4        (heartbeat::ocf:Filesystem):    Started main.pokepoke.lan
    httpd_5     (lsb:httpd):    Started main.pokepoke.lan
    mysqld_6    (lsb:mysqld):   Started main.pokepoke.lan

問題は解消してくれた。

しかし、ほんとにフェイルオーバーしてくれるのか心配・・・・

コメントなし :, more...

Mysqlの権限設定

by jun on 1月.18, 2011, under Mysql, Programing

いまさらこんな基本的なことを、私的に記録します。
なんというか、権限の設定って最初にガッツリやったらしばらく気にしないので、あまり気にしていなかったのですが
作業記録とGoogleの利用履歴の頻度を見てビックリしたのですが、Mysql権限設定 検索結果からたくさんのサイトに訪問回数20回以上とでていました。
これはいかんということで、自己記録です。
これくらい覚えておいてサクっとやるんでしょうけどね・・・最近記録と記憶の数の限界にきたようでどうも頭に入りません。

そうそう、おもいっきり脱線しますが今年に入ってやたらとマックユーザーからの参照が多くなりました。
MacBookAirの情報が少しはやくにたってるのかもしれません。
ちゃんと記事かきますね。
ホントはバラしたりとか、マルチブートもいろいろやったんですが・・・ちょっと多忙すぎです!
ご勘弁を (;´д⊂)

■ MySQLインスト後のroot権限設定

# /usr/bin/mysqladmin -u root -h ホスト名 password 'new-password'

■ MySQL 登録ユーザー権限確認

mysql> select user,host,password from mysql.user;

+--------+-----------+------------------+
| user   | host      | password         |
+--------+-----------+------------------+
| root   | localhost | **************** |
| root   | 127.0.0.1 | **************** |
| root   | %         | **************** |
| user   | %         | **************** |
+--------+-----------+------------------+

■ MySQL ユーザーの追加

mysql> GRANT ALL PRIVILEGES ON *.* TO ユーザー名@"%" IDENTIFIED BY 'パスワード' WITH GRANT OPTION;

■ MySQL ユーザーのパスワード設定と変更

mysql> SET PASSWORD FOR ユーザ名@"%" = PASSWORD('パスワード');

1)Grant文で「GRANT ALL」としてすべての命令を意味する。各命令を受け付けるかを指定。命令は下記の通り。

ALL [PRIVILEGES] WITH GRANT OPTION 以外のすべての権限を設定
ALTER ALTER TABLE の使用を許可
CREATE CREATE TABLE の使用を許可
CREATE TEMPORARY TABLES CREATE TEMPORARY TABLE の使用を許可
DELETE DELETE の使用を許可
DROP DROP TABLE の使用を許可
EXECUTE ストアドプロシージャの使用を許可(MySQL 5.0)
FILE SELECT ... INTO OUTFILE および?LOAD DATA INFILE の使用を許可
INDEX CREATE INDEX および?DROP INDEX の使用を許可
INSERT INSERT の使用を許可
LOCK TABLES SELECT 権限を持つテーブルで?LOCK TABLES の使用を許可
PROCESS SHOW FULL PROCESSLIST の使用を許可
REFERENCES 将来のために予約
RELOAD FLUSH の使用を許可
REPLICATION CLIENT スレーブおよびマスタのサーバーを知る権利を付与
REPLICATION SLAVE レプリケーションのスレーブに必要(マスタからバイナリログを読み取るため)
SELECT SELECT の使用を許可
SHOW DATABASES SHOW DATABASES によりすべてのデータベースが表示される
SHUTDOWN mysqladmin shutdown の使用を許可
SUPER 最大接続数に達していても接続を 1 つだけ許可し、コマンド?CHANGE MASTERKILL threadmysqladmin debugPURGE MASTER LOGS、および?SET GLOBAL の実行を許可
UPDATE UPDATE の使用を許可
USAGE USAGE を使用すると、権限なしのユーザを作成できます。“権限なし” のシノニム
GRANT OPTION WITH GRANT OPTION のシノニム

複数の命令をつなげるばあいはこんな感じ

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON database.* TO custom@'%' IDENTIFIED BY 'パスワード';

2)「PRIVILEGES ON *.*」としてすべての<データベース.テーブル>を意味する。各テーブルやデータベースごとに権限を設定する場合はここで指定する。

3) 「TO ユーザー名@”%”」 でどのホストからのユーザーかを指定する。”%” はすべてのホストをしていする場合に利用する。

4) 「IDENTIFIED BY ‘パスワード’」でパスワードを指定する。ここで万が一「/etc/my.cnf」でold password=1を設定していない場合は「IDENTIFIED BY old_password(‘****’)」とすればPHPやPerlからデータベースを呼び出す際に暗号化に対応していない場合でも利用できるようになる。

■ MySQL ユーザー権限の削除

mysql> delete * from mysql.user where host='%' AND user='user';

■ コマンドの実行を反映

mysql> FLUSH PRIVILEGES;
1 コメント : more...

CentOSを使ったLAN内用HAクラスタリングWEBDBサーバー構築 その3

by jun on 11月.17, 2010, under Linux

CentOS 5.5でMySQL Clusterを設定

まずMysql Clusterがインストール可能なyum の Repo [wing] があるので、これを使ってインストールします。

# cd /etc/yum.repos.d/
# wget http://wing-net.ddo.jp/wing/wing.repo
# wget http://wing-net.ddo.jp/wing/wing-extras.repo
# yum --enablerepo=wing install mysql-server mysql-cluster
=====================================================================================================================================================================
 Package                                    Arch                             Version                                          Repository                        Size
=====================================================================================================================================================================
Installing:
 mysql-cluster                              i386                             5.1.52-1.el5_1.wing                              wing                              15 M
 mysql-server                               i386                             5.1.52-1.el5_1.wing                              wing                              13 M
Installing for dependencies:
 mysql-libs                                 i386                             5.1.52-1.el5_1.wing                              wing                             4.2 M
Updating for dependencies:
 mysql                                      i386                             5.1.52-1.el5_1.wing                              wing                             4.3 M
 perl-DBD-MySQL                             i386                             4.010-1.el5_0.wing                               wing                             217 k

Transaction Summary
=====================================================================================================================================================================
Install       3 Package(s)
Upgrade       2 Package(s)

Total download size: 37 M

リポジトリをダウンロードしてyumコマンドでwing repo を指定したってことですね。

インストールが終わったら設定を行います。

まずわたしがひっかたったのは、ノードとホストってどう違うの?っていうか設定はこのノードにしか必要無いとか書いてあるんですが、わかりにくいですよね?

ていうか、わかりにくいです。

そこでがっちり作ってみました。まずはネットワーク構成図です。

VMware ESXi ネットワーク構成図

VMware ESXi ネットワーク構成図

このネットワーク構成のそれぞれのサーバーに下記のような構成を行います。

MySQLCluster構成

MySQLCluster構成

「WBCMainサーバー」での設定

1)MySQLサーバーの設定

# vi /etc/my.cnf
----以下viで編集---
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# To allow mysqld to connect to a MySQL Cluster management daemon, uncomment
# these lines and adjust the connectstring as needed.
#ndbcluster
#ndb-connectstring=”nodeid=4;host=localhost:1186″

ndbcluster
ndb-connectstring=192.168.0.2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[ndbd]
# If you are running a MySQL Cluster storage daemon (ndbd) on this machine,
# adjust its connection to the management daemon here.
# Note: ndbd init script requires this to include nodeid!
#connect-string=”nodeid=2;host=localhost:1186″

connect-string=192.168.0.2

[ndb_mgm]
# connection string for MySQL Cluster management tool
#connect-string=”host=localhost:1186″

connect-string=192.168.0.2

[mysql_cluster]
ndb-connectstring=192.168.0.2

2)管理ノードの設定

# cp /usr/share/mysql/ndb-config-2-node.ini /var/lib/mysql-cluster/config.ini  ←テンプレートをコピーしてviで編集
# vi /var/lib/mysql-cluster/config.ini
---以下viで編集---
# Example Ndbcluster storage engine config file.
#
[ndbd default]
NoOfReplicas= 2
MaxNoOfConcurrentOperations= 10000
DataMemory= 80M
IndexMemory= 24M
TimeBetweenWatchDogCheck= 30000
DataDir= /var/lib/mysql-cluster
MaxNoOfOrderedIndexes= 512
[ndb_mgmd default]
DataDir= /var/lib/mysql-cluster
[ndb_mgmd]
Id=1
#HostName= localhost
HostName=192.168.0.2
[ndbd]
Id= 2
#HostName= localhost
HostName= 192.168.0.2
[ndbd]
Id= 3
#HostName= localhost
HostName= 192.168.0.3

[mysqld]
Id= 4
HostName= 192.168.0.2

[mysqld]
Id= 5
HostName= 192.168.0.3

[mysqld]
Id= 6

[mysqld]
Id= 7
# choose an unused port number
# in this configuration 63132, 63133, and 63134
# will be used
[tcp default]
PortNumber= 63132

「WBCsubサーバー」での設定

1)MySQLサーバーの設定

# vi /etc/my.cnf
----以下viで編集---
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1

# To allow mysqld to connect to a MySQL Cluster management daemon, uncomment
# these lines and adjust the connectstring as needed.
#ndbcluster
#ndb-connectstring=”nodeid=4;host=localhost:1186″

ndbcluster
ndb-connectstring=192.168.0.2

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[ndbd]
# If you are running a MySQL Cluster storage daemon (ndbd) on this machine,
# adjust its connection to the management daemon here.
# Note: ndbd init script requires this to include nodeid!
#connect-string=”nodeid=2;host=localhost:1186″

connect-string=192.168.0.2

[ndb_mgm]
# connection string for MySQL Cluster management tool
#connect-string=”host=localhost:1186″

connect-string=192.168.0.2

[mysql_cluster]
ndb-connectstring=192.168.0.2

2)管理ノードの設定

# cp /usr/share/mysql/ndb-config-2-node.ini /var/lib/mysql-cluster/config.ini  ←テンプレートをコピーしてviで編集
# vi /var/lib/mysql-cluster/config.ini
---以下viで編集---
# Example Ndbcluster storage engine config file.
#
[ndbd default]
NoOfReplicas= 2
MaxNoOfConcurrentOperations= 10000
DataMemory= 80M
IndexMemory= 24M
TimeBetweenWatchDogCheck= 30000
DataDir= /var/lib/mysql-cluster
MaxNoOfOrderedIndexes= 512
[ndb_mgmd default]
DataDir= /var/lib/mysql-cluster
[ndb_mgmd]
Id=1
#HostName= localhost
HostName=192.168.0.2
[ndbd]
Id= 2
#HostName= localhost
HostName= 192.168.0.2
[ndbd]
Id= 3
#HostName= localhost
HostName= 192.168.0.3

[mysqld]
Id= 4
HostName= 192.168.0.2

[mysqld]
Id= 5
HostName= 192.168.0.3

[mysqld]
Id= 6

[mysqld]
Id= 7
# choose an unused port number
# in this configuration 63132, 63133, and 63134
# will be used
[tcp default]
PortNumber= 63132

はい、まったく同じ設定を行います。それぞれ設定が完了したら、サーバーを起動していきます。

起動順序は「WBCmain」→「WBCsub」がよろしいかと思います。subのndbdを起動したら、mainの応答がないのでエラーを返してきたりしました。

「WBCmainサーバー」でのサーバー起動

1)管理ノードの起動と自動起動登録
# service ndb_mgmd start
# chkconfig ndb_mgmd on
2)データノードの起動と自動起動登録
# service ndbd start
# chkconfig ndbd on
3)SQLノードの起動と自動起動登録
# service mysqld start
# chkconfig mysqld on

「WBCsubサーバー」でのサーバー起動

1)データノードの起動と自動起動登録
# service ndbd start
# chkconfig ndbd on
2)SQLノードの起動と自動起動登録
# service mysqld start
# chkconfig mysqld on

「WBCmainサーバー」で動作確認と管理ノード操作

# ndb_mgm
-- NDB Cluster -- Management Client --
ndb_mgm> show
Connected to Management Server at: 192.168.0.2:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @192.168.0.2  (Version: 5.1.52, Nodegroup: 0, Master)
id=3    @192.168.0.3  (Version: 5.1.52, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @192.168.0.2  (Version: 5.1.52)

[mysqld(API)]   4 node(s)
id=4    @192.168.0.2  (Version: 5.1.52)
id=5    @192.168.0.3  (Version: 5.1.52)
id=6 (not connected, accepting connect from any host)
id=7 (not connected, accepting connect from any host)

ndb_mgm>

これでデータベースサーバーのクラスタ化は完成。

複数のサーバーが常に同じ情報をもつようになります。

この構造と次のHAクラスタサーバー構成を導入すれば、かなりの高可用性となることでしょう。

ndb_mgm管理コマンドでオンラインバックアップにも対応しています。

それはまた今度。

次はHeartbeat+DRBDでアクティブ・スタンバイ型のHA(High Availability:高可用性)クラスタシステムを構築する。

コメントなし :, , , , , more...

AJAX on PHP WEB Aplicationのぬかるみ

by jun on 6月.22, 2010, under WEB

こんにちわ!

すっかり家に帰れなくなってきたJUNです。

現在結構でかいPHPクラウドシステムを開発しております。

フレームワークを使って開発効率をあげつつ、サーバーもカスタマイズしてガンガン作ってみました。

CentOS 5.5 +Apache + PHP 5.1.6 (5.2は見送り) +MySQL 5.0.77+GD2です。

これにIFと開発効率をあげるため、AJAXを実装すべく、PrototypeとPHPによる制御が簡単な

PEARライブラリ HTML_AJAX XAJAX CakePHPなどを導入。

さぁ、ガリガリ書くぞ。

おお、こんなことも、あんなこと、おお・・・あん。いやんw

って、ぉぃ。

テストページ作ってる最中は問題なくAJAXの機能を堪能できるんですが

開発中のサーバーに実装してみたら・・・なぜか動きません。

1日かけて文字コードの設定をさまよい歩きました。

Apache(httpd.conf),MySQL(my.ini) ,PHP(php.ini),HTMLのUTF-8化。

いろいろ不備も見つけながら、設定をすすめていくと、ん?

IEだけの問題じゃん。

ということで、グーグル先生をさまよってみると

IEはAjaxの非同期通信でキャッシュを使ってしまうらしい => 対策(具体的には今度書くね)

IEはフォームから送信するときに一部のバージョンでASCIIで送ることがあるのでHeaderをきちんと宣言しないといけない。

IEはバージョンによって・・・もうそれはいろいろでてくるわけですわ。

1日かかって、何も進んでない&何もわからずじまい。

2日目

すべての文字コードをUTF-8へ十分確認したけど、あきらめきれずもう一度確認!

くぅ・・・痛恨のミス!なんでJavascriptのファイルに@charset “utf-8″とか入ってるんだよ!

これかぁ・・・と思いきや、改善せず。

このとき微妙な問題を発見。

ブラウザチェック => 表示される => ソースコード表示 => 問題ない =>ソースをコピーしてエディターへ

すると・・・

???<html>

/省略/

</html>?STM

へ?

もうさっぱりわかんねっすよ。

Ajax?サーバー?ブラウザ?文字コード?エディタ?

いやぁ久しぶりに誰でもいいから女を抱きたくなりました。

(ちなみに私は極度のプレッシャーをかけられると、女を抱きたくなります)

途方もなく、時間もなく、精神状態も限界にきていました。

そんなわけで、ちょっと寝ます。こういうときに何してもいいことありませんから。

翌朝、もうIEの対応は納期延長をきめこんで、もうやらない宣言しようかと思ったのですが

なんだか、ピンときたんです。

これって、PHPでincludeしてるからシステムからでてるんじゃね?

ビンゴでした。

急に発生した問題がまず「エラー c00ce56e のため操作を完了できませんでした

とIEのエラーコンソールに怒られます。

まずこれで見つかったのはphp.iniの中の

「default_charset = “utf8″」

これ間違えらしいです。

正解は

「default_charset = “UTF-8″」

こうしないとIEは勘違い起こすらしいよ。でも、これでもPHP の include問題は解決はしない。

まぁここからも、サーバーの設定やらなにやら、膨大な時間がかかったんですが、月面にたどりついたような感動を与えてくれたサイトがこちら。

phpで.incファイルをincludeするとieですきまがはいる(解決編)

http://pugiemonn.blog6.fc2.com/blog-entry-801.html

結果「utf-8 bom php レイアウト」でグーグル先生に聞いてみなってんで、聞いてみるとビンゴ!

utf-8とutf8-nの違いでした。

utf-8ってBOMなんかつけてたんですね。忘れてました。

このせいで、includeしたときにBOMをみちゃうわけです。

とうぜんこんなもの拾うのはオバカなIEだけでやんす。

そんなわけで、ソースを全部文字コード変換!

問題解決しました。

どうか、一人でも多くのAjax文字コード泥沼戦争から救いの女神がおりますことをお祈りしております。

コメントなし :, , , , , , more...



何かお探しですか?

以下にキーワードを入力してサイト内検索が可能です:

Still not finding what you're looking for? Drop a comment on a post or contact us so we can take care of it!