Midnightjapan

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 7月.26, 2011, under Linux, Mysql, PHP, Programing

1号機(プライマリー) 2号機(セカンダリー)として稼働中のDRBD+Heartbeat(HAクラスタシステム)を構築している。
これを安全に停止するための自己記録である。

まず2号機にログインして管理者になり[Heartbeat]を停止する。

[管理者@2号機] # /etc/rc.d/init.d/heartbeat stop

これで、2号機が停止したら1号機にログインして管理者になり[Heartbeat]を停止する。

[管理者@1号機] # /etc/rc.d/init.d/heartbeat stop

※ 深夜の気が向いたときしかやりたくないので、ついここで、rootにならずにやって、サブシステムがロックしているとか、よくわからないエラーがでてしまい、余計な時間がかかることがあるが、rootになっていれば問題はおきるわけがない。

つづいて、[Heartbeat]がとまったことでDRBDもこのようになっている。

[管理者@1号機] # /etc/rc.d/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: ************************* build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09
m:res  cs         ro                   ds                 p  mounted  fstype
0:r0   Connected  Secondary/Secondary  UpToDate/UpToDate  C

そこでこのようにプライマリーにしてマウントする

[管理者@1号機] # drbdadm primary all
[root@winsor ~]# /etc/rc.d/init.d/drbd status
drbd driver loaded OK; device status:
version: 8.3.8 (api:88/proto:86-94)
GIT-hash: ************************* build by mockbuild@builder10.centos.org, 2010-06-04 08:04:09
m:res  cs         ro                 ds                 p  mounted  fstype
0:r0   Connected  Primary/Secondary  UpToDate/UpToDate  C
[管理者@1号機] # mount /dev/drbd0 /マウントしたいパス

これで安全に停止してメンテナンスが可能です。

ささ、MySQLのバックアップやディスク容量の増加など完了しました。
今度はちゃんと元にもどしましょう。

まず1号機にログインして管理者になり[Heartbeat]を開始する。

[管理者@1号機] # /etc/rc.d/init.d/heartbeat start

つぎに2号機にログインして管理者になり[Heartbeat]を開始する。

[管理者@2号機] # /etc/rc.d/init.d/heartbeat start

そしたらあわてずに待つ。
1号機2号機どちらでもかまわないが[Heartbeat]のステータスを表示する。
一応プライマリーの1号機でみてみることにする。

[管理者@1号機] # crm_mon
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode

============
Last updated: Tue Jul -- --:--:-- ----
Current DC: NONE
2 Nodes configured.
1 Resources configured.
============

Node: 1号機.lan (***********************************************): OFFLINE
Node: 2号機.lan (***********************************************): OFFLINE

じっくりね。結構この状態が続いて、あせることがあるかもしれないけど、あわてない。
そして1分から2分後

[管理者@1号機] # crm_mon
Defaulting to one-shot mode
You need to have curses available at compile time to enable console mode

============
Last updated: Tue Jul -- --:--:-- ----
Current DC: 1号機.lan (***********************************************)
2 Nodes configured.
1 Resources configured.
============

Node: 1号機.lan (***********************************************): online
Node: 2号機.lan (***********************************************): online

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

ふぅ、一安心。たまにしかやらないから、余計ね。ご苦労様でした _(._.)_

コメントなし :, , 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...



何かお探しですか?

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

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