MySQL 『ロック関連』の入門メモ

たまにしか使わないので、よく忘れてしまうMySQLのロック処理。

この機会メモ!

mysqldump 時にread lock (読み込みのみ許可)をする際は、下記オプションをつける。


mysqldump -u root -p --lock-all-tables -A > dump20110120.sql

「–lock-all-tables」 = FLUSH TABLES WITH READ LOCKと同じ。(全テーブルをreadロック)

テーブルをreadロック


mysql> LOCK TABLES friends READ; READロックを取得

mysql> LOCK TABLES friends WRITE; WRITEロックを取得

mysql> LOCK TABLES table_a READ, table_b WRITE; 複数のテーブルを同時にロック

テーブルのロックを解除する場合は、以下のようにする。


mysql> UNLOCK TABLES;

※ロック中は、挙動としてselectやupdateをした際に、ロックがはずれるまで応答をまつ。

MySQLを停止できないし、起動もできなくなった時のメモ

いきなり、MySQLを停止できないし、起動もできなくなった時のメモ

“SQLSTATE[HY000] [1040] Too many connections”

というエラーがでて調べてみた。


mysql> show full processlist;

するとmysqlのプロセスが大量に残っている。

max clientsの上限まで立っているエラーでした。

この方法はmysqlというよりは単にプロセスを殺して解決した際のメモなので、
参考程度でお願いします(^_^;)


# service mysqld stop mysqld を停止中: [ OK ]

となるが実際はまだ起動中


# /etc/init.d/mysqld status mysqld (pid 20022) を実行中...

いくたstopコマンドをうってもダメ。


# service mysqld start

では失敗となる。

CentOS6.5のプロセスを確認すると

# ps -xaf | grep mysql

mysqldプロセスが残っている。

思い切って、プロセスを削除


# kill 対象プロセスid

これでも消えない。

もういいやと思い、強制的にプロセス削除


# kill -9 対象プロセスID

さすがに停止した。

で、
service mysqld start

すると、、また失敗。

で、サーバーの容量を疑いました。
最近容量いっぱいで、不要ファイル削除したばっかだよな。。とおもいつつ、
確認してみるとまた、、、


# df -h

100%使いきってました。。汗

不要なファイルを削除して、

再度


# service mysqld start

成功しました!・・・あああ
とてつもなく初歩的

参考にさせて頂いたサイト
http://beyondjapan.com/blog/2016/03/mysql-stop-start-issues

Cakephp3をCentOS7( php7 + php-fpm + nginx + MySQL )にインストールした際のメモ

大分出遅れた感がありますが、最近cakephp3のサービスを構築したので、
それを兼ねてメモ。

早速、cakephp3の公式サイトでインストール方法を確認。

http://book.cakephp.org/3.0/ja/installation.html

システム要件を確認すると。。。

システム要件
HTTPサーバー。例: Apache。mod_rewrite が推奨されますが、必須ではありません。
PHP 5.5.9 以上 (PHP 7 も含む)
PHP mbstring 拡張
PHP intl 拡張

…(PHP 7も含む)!

せっかくなので、速いとウワサのphp7に、php-fpmと、nginxの構成で、
yumでインストールしてみました!!

mac(yosemite)にmysqlクライアントのみインストール

ぐぐっても中々でてこなかったので、メモ。

macにmysql-clientのインストール。
macをmysqlサーバーまで起動してしまうと重くなりそうなので、
CUIで使えるmysql-clientだけインストール。

brewのインストール

homebrewを参考に

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

brewがインストール済みなら、下記コマンドでmysqlのclientのみインストール

brew install mysql --client-only

これで下記コマンドなどで、データベース・サーバーにアクセス!

mysql -u dbuser -p -h 192.168.1.1 

MySQL:テーブル単位のダンプ&リストアのメモ

※ポイント –default-character-set=binary 文字化け対策

テーブル指定ダンプ
mysqldump -u testuser testdb -p --default-character-set=binary --tables testtable > [出力先ファイル名].sql
データベースを指定して、上記のテーブルデータのリストア
mysql -u testuser testdb -p --default-character-set=binary < [出力先ファイル名].sql
指定テーブル以外をダンプする場合
mysqldump -u testuser -p testdb --default-character-set=binary --ignore-table=testdb.testtable1 --ignore-table=testdb.testtable2 > [出力先ファイル名].sql

CentOS6.2にyumのMySQL5.5とソースのMySQL5.5を1台でレプリカした際のメモ

1台のサーバーで、2つのMySQLを入れるために、
yumでもともと入っているMySQL5.5に追加で、ソースのMySQL5.5を入れたメモ。
目的はサーバー1台でMaster-Slaveのレプリケーションの検証をするため。
(あくまで簡易めもなので、適宜自分の環境にあわせてください。^^汗)

構築環境
CentOS6.2 CentOS release 6.2 (Final)
マスター用:MySQL5.5(yumでインストール)Server version: 5.5.23-log MySQL Community Server (GPL) by Remi
スレーブ用:MySQL5.5(ソースからインストール)Server version: 5.5.30-log Source distribution

 

1.マスター用のMySQLをyumインストール
※デフォルトのyumでは5.5はなかったはずなので、remiから

RPMのepel,remiのインストール

現状のyumで利用できるmysqlのバージョンを確認(おそらく5.1xxxになっているはず)
# yum info mysql
# rpm -ivh ftp://ftp.pbone.net/mirror/download.fedora.redhat.com/pub/fedora/epel/6/x86_64/epel-release-6-5.noarch.rpm
(CentOS 6.x, x86_64の場合)
DL元サイト:http://rpm.pbone.net/index.php3/stat/4/idpl/15279403/dir/redhat_el_6/com/epel-release-6-5.noarch.rpm.html

バージョン確認
# yum --enablerepo=epel,remi list mysql-server 

yumからインストール
# yum --enablerepo=epel,remi install mysql mysql-server mysql-devel mysql-libs

# service mysqld start
# mysql

2.スレーブ用のMySQLのソースインストール

存在しなければmysqlユーザーを登録
# groupadd mysql
# useradd -m mysql -g mysql -d /usr/local/mysql/data
# passwd mysql

コンパイラ系を準備
# yum install gcc gcc-c++ bison
# yum install ncurses-devel
# yum install cmake

自分は/usr/local/src/にとりあえずソースのmysqlをダウンロード
※ソースインストールの際のconfigreが5.5から使えなくなったので、cmakeを利用する。そのためcmakeファイルが入っているものをダウンロード!
# wget 'http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.30.tar.gz/from/http://cdn.mysql.com/'

# cd mysql-5.5.30xx/
cmakeのオプションはお好みで
# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_INNOBASE_STORAGE_ENGINE=1

# make
# make install

# chown -R mysql:mysql /usr/local/mysql/

# cp /usr/local/mysql/support-files/my-large.cnf /usr/local/mysql/my.cnf

※適宜編集
# vi /usr/local/mysql/my.cnf

# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql

# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld_slave

# chmod 755 /etc/init.d/mysqld_slave

※適宜編集
# vim /etc/init.d/mysqld_slave
basedir=/usr/local/mysql
datadir=/usr/local/mysql/var
mysqld_pid_file_path=/var/run/mysqld/mysqld_slave.pid

インストールしたmysqlを起動
# /etc/init.d/mysqld_slave status
# /etc/init.d/mysqld_slave start

ログイン
# /usr/local/mysql/bin/mysql

自動起動になっているか確認
# chkconfig --add mysqld_slave
# chkconfig mysqld_slave on
# chkconfig --list | grep mysql

 

 

SQLで2つ以上のIDでin検索

MySQLなどで、たまにDBの構造上、2つのIDでin(複数)検索したい時がある。
ちから技でand検索などするのもいや場合があるので、そいいう時は、concatで連結して、in検索!

select
*
from
where
concat(A_ID,'-',B_ID) in(a_id-b_id)

ただ分かりづらくなる可能性もあるので、ご注意を。

wordpressでSQLを利用する

wordpressには色々と便利な機能が用意されていてびっくりなのですが、
まさかPDO的なものがもうすでに用意されてました。

$wpdb

というもの。

下記のようなのりで使えます。

[php]
$obj = $wpdb->get_results(“SELECT * FROM $wpdb->posts where post_title = ‘Hello world!'”);
print_r($obj[0]->post_title);
[/php]

下記記事がわかりやすくまとめておりました。

http://blog.syuhari.jp/archives/410