mysql buckup | mysqlhotcopy or mysqldump
1月 12th, 2012
http://dev.mysql.com/doc/refman/5.5/en/backup-methods.html
http://dev.mysql.com/doc/refman/5.5/en/mysqlhotcopy.html
mysqlhotcopyしようと思ったらinnodbでは使えないとのこと。
#!/bin/sh
SRC_IP=’000.000.000.000′
SRC_DIR=”/home/bkup/data/bkup/mysql”
TO_IP=’1.1.1.1′
TO_DIR=”/home/bkup/data/${SRC_IP}/mysql”
DATESTR=`date ‘+%Y%m%d%H%M%S’`
MYSQL_NAME=’wordpress’
# test touch /home/bkup/data/bkup/mysql/db.$DATESTR
# touch /home/bkup/data/bkup/mysql/db.${DATESTR}
mkdir -p ${SRC_DIR}
# mysqldump -u root –all-databases > ${SRC_DIR}/${MYSQL_NAME}.${DATESTR}
# gzip ${SRC_DIR}/${MYSQL_NAME}.${DATESTR}
ssh ${TO_IP} mkdir -p ${TO_DIR}
CMD_STR=”rsync -auz ${SRC_DIR}/${MYSQL_NAME}.${DATESTR}.gz ${TO_IP}:${TO_DIR}/${MYSQL_NAME}.${DATESTR}”
$CMD_STR
こんな感じで。dumpしてrsync
PDOのdsnにcharset が必要だった。|mysql php
12月 26th, 2011
mysql:host=slave.mysql.tranode.com;dbname=tranode;port=99999;charset=utf8;
みたいな。
charsetを指定しないと文字化けした。phpからだけ見てるとわからないけど
mysqlから直接見ると文字化けしてたので、文字コードが間違えて入ってるっぽい。
skip slave sql error | mysql
12月 15th, 2011
slaveでsqlエラーが出ると
mysql > show slave status;
Slave_IO_Running: Yes
Slave_SQL_Running: No
–
Last_Errno:
Last_Error: Error ‘xxx’
となりました。
(原因はいろいろですが、単純な場合は、slave側でstart slaveの前に何かsqlを実行してそれが邪魔しているとか
飛ばしても良いエラーの場合は、
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
start slave;
でスキップします。
====
データがある状態からstart slaveするときは。
master のポジションを確認
FLUSH TABLES WITH READ LOCK; // マスターの書き込みを停止。& dump & copy
show master status; // file positionを確認
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000001 | [...]
can not use current_timestamp on 2 timestamp columns | mysql
12月 14th, 2011
create table でこれがエラーになる。
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
http://dev.mysql.com/doc/refman/5.5/en/timestamp.html
あってそうだけど、2個 timestamp型にCURRENT_TIMESTAMPを使えないらしい。
テーブル内の1つの TIMESTAMP カラムに対して、現在のタイムスタンプをデフォルト値と自動更新値として指定する事ができます。現在のタイムスタンプを、カラムを初期化するデフォルト値にする事、または自動更新のデフォルト値にする事、またはその両方にする事が可能です。現在のタイムスタンプを、1つのカラムを初期化するデフォルト値にし、別のカラムの自動更新のデフォルト値にする事は不可能です。
ということで。
`created_at` timestamp NOT NULL DEFAULT ‘0000-00-00 00:00:00′,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
instert into で NOW() を入れてみる。
mysql> select * from users;
+———+——–+——+———-+———————+———————+
| id | authid | mail | [...]
generate id by procedure | mysql
12月 14th, 2011
作成時は、delimiter // で ; を変えておく必要があります。
autoincrementのIDを作成して返します。
mysql > delimiter //
CREATE PROCEDURE check_user (IN s_id VARCHAR(255), OUT r_id INT(11))
BEGIN
SELECT id INTO r_id FROM users WHERE authid=s_id;
IF r_id is NULL THEN
INSERT INTO users( authid ) values( s_id );
SELECT id INTO r_id [...]
mysqld_multi で複数起動&レプリケーション mysql_safe | mysql 5.5
12月 13th, 2011
とりあえず、2つ動かして、master-slaveをテスト環境で作る。
適当に入れて適当に起動したら。
まだ作ってませんがTRANODEもよろしくお願いします。
user tranodeで動かします。
/etc/my.cnf
[mysqld_multi]
mysqld = /usr/bin/mysqld_safe
mysqladmin = /usr/bin/mysqladmin
user=root
~/.my.cnf
[mysqld1]
datadir = /home/tranode/data/my/data1
socket = /home/tranode/data/my/mysql1.sock
pid-file = /home/tranode/data/my/mysqld1.pid
port = 50431
server-id=1
log-error=/home/tranode/log/my/mysqld1.log
sync_binlog=1
log-bin=mysql-bin
log-bin-index=mysql-bin
relay-log=relay-bin
relay-log-index=relay-bin
# slave
[mysqld2]
datadir = /home/tranode/data/my/data2
socket = /home/tranode/data/my/mysql2.sock
pid-file = /home/tranode/data/my/mysqld2.pid
port = 50432
server-id=2
master-host=127.0.0.1
master-port=50432
master-user=tranode
master-password=********
log-error=/home/tranode/log/my/mysqld2.log
read_only
log-slave-updates
log-bin=mysql-bin
log-bin-index=mysql-bin
relay-log=relay-bin
relay-log-index=relay-bin
$ mysqld_multi start –log=/home/tranode/log/my/multi.log
* root以外で実行する場合logを指定しないとエラーが出る。
WARNING: Log file disabled. Maybe directory or file isn’t writable?
111213 19:21:17 [Note] Plugin ‘FEDERATED’ is disabled.
/usr/libexec/mysqld: Table ‘mysql.plugin’ doesn’t exist
111213 19:21:17 [ERROR] Can’t open the [...]
mysql error | Error message file ‘/usr/share/mysql/english/errmsg.sys’ had only 480 error messages
5月 13th, 2011
remiをいれたり、i386が入ってしまったりするとエラーになるので、いったん削除して入れなおす。
#yum remove mysql*
#yum –enablerepo=remi install php-mysql mysql-server
起動できないときは、エラーの内容によっていかを試す。
http://dev.mysql.com/doc/refman/5.1/ja/installation-programs.html
* mysql_install_db
* mysql_upgrade
110513 19:16:13 [ERROR] Missing system table mysql.proxies_priv; please run mysql_upgrade to create it
httpdプロセスがとまる件2
1月 4th, 2010
httpdプロセスが停まってしまう件
を書きましたが、残念ながらたまり続けます。。。
close_waitについては、ちゃんと消えているのですが、httpdプロセスが消えてくれません。
yahooやgoogleのcrawlerが多かったのですが、特に相手が悪いわけではなく原因は少しわかってきました。
タイムアウトするリクエストのタイムアウトを待たずにリトライして別プロセスで新しいものを取得すると・・・発生するようです。
とりあえずもう少し処理を修正してタイムアウトがちょっとでも起きないようにして行きたいと思います。
MySQLとの接続関連の何かがプロセスを切らせない何かがあるようです。
しかし slowqueryもないのでわからない。。。
Mysql Union 複数テーブルから結果を取得
11月 6th, 2009
where句も2つの結果の並べ替えもOKのようです。
mysql> (select title from bid where match(title,description) against(”*W1:3,2:1 DVD” in boolean mode) limit 2) UNION ( select title from bid_0910 where match(title,description) against(”*W1:3,2:1 high” in boolean mode) limit 2) order by title\G;
*************************** 1. row ***************************
title: amazonの中古最低価格より安い!新品「TOEFL GrammarWorkbook」T
*************************** 2. row ***************************
title: 人気の一体型 DESKPOWER LX50M●CelD 2.9G 512M 300G Sマルチ
*************************** 3. row ***************************
title: $動作品☆Lavie ☆LT/Pm1,6G/512MB/100GB/DVD-S$Wlan/TV
*************************** 4. row ***************************
title: [...]
mysql : copy teble
11月 6th, 2009
テーブルをコピーしてみます。
table_a を table_b にコピー
mysql> create table table_b like table_a;
Query OK, 0 rows affected (0.32 sec)
mysql> show create table table_b\G;
*************************** 1. row ***************************
Table: table_b
Create Table: CREATE TABLE `table_b` (
`id` varchar(32) NOT NULL,
`url` varchar(255) NOT NULL,
`title` varchar(255) NOT NULL,
`description` text NOT NULL,
`created_at` [...]