弊社がAWSを使いはじめたきっかけ、運用のポイント等をまとめてあります。
また、第1特集の1、2章は弊社SREの石川が執筆してます。
こちらも弊社のAWS運用ノウハウをそのまま公開しています。
10月18日発売です!
Software Design (ソフトウェア デザイン) 2010年 11月号 [雑誌]
posted with amazlet at 10.10.13
技術評論社
mysql> delete from slow_log;
ERROR 1556 (HY000): You can't use locks with log tables.
mysql> truncate table slow_log;
ERROR 1044 (42000): Access denied for user 'xxxx'@'%' to database 'mysql'
mysql.rds_rotate_general_log
mysql.rds_rotate_slow_log
CALL mysql.rds_rotate_general_log;
CALL mysql.rds_rotate_slow_log;
mysql> show create procedure rds_rotate_slow_log \G
*************************** 1. row ***************************
Procedure: rds_rotate_slow_log
sql_mode:
Create Procedure: CREATE DEFINER=`rdsadmin`@`localhost` PROCEDURE `rds_rotate_slow_log`()
READS SQL DATA
DETERMINISTIC
BEGIN
CREATE TABLE IF NOT EXISTS mysql.slow_log2 LIKE mysql.slow_log;
DROP TABLE IF EXISTS mysql.slow_log_backup;
RENAME TABLE mysql.slow_log TO mysql.slow_log_backup, mysql.slow_log2 TO mysql.slow_log;
END
character_set_client: latin1
collation_connection: latin1_swedish_ci
Database Collation: latin1_swedish_ci
mysql.rds_kill
mysql.rds_kill_query
$ rds-version
Relational Database Service CLI version 1.1.004 (API 2010-01-01)
$ rds-modify-db-instance dbname --multi-az true
$ rds-restore-db-instance-to-point-in-time bar -s foo -l
$ rds-restore-db-instance-to-point-in-time bar -s foo -r 2010-05-04T09:20:00Z
$ rds-describe-db-instances --show-long --headers
DBINSTANCE,DBInstanceId,Created,Class,Engine,Storage,Master Username,Status,Endpoint Address,Port,AZ,Backup Retention,PendingBackupRetention,PendingClass,PendingCredentials,PendingStorage,DB Name,Mainte
nance Window,Backup Window,Latest Restorable Time
DBINSTANCE,foo,2010-02-22T10:07:04.933Z,db.m2.4xlarge,mysql5.1,20,owner,available,foo.xxxxxxx.us-east-1.rds.amazonaws.com,3306,us-east-1a,1,(nil),(nil),(nil),(nil),(nil),tue:05:00-mon:09:00,
19:00-21:00,2010-05-06T08:45:00Z
# -*- coding: utf-8 -*-
from django.core.management.base import BaseCommand
from django.contrib.contenttypes.management import update_all_contenttypes
from django.contrib.auth.management import create_permissions
from django.db.models import get_apps
"""
パーミッションを更新する
"""
class Command(BaseCommand):
def handle(self, *args, **options):
# Add any missing content types
update_all_contenttypes()
# Add any missing permissions
for app in get_apps():
create_permissions(app, None, 2)
$ python manage.py syncpermissions
$ git config --global alias.ci "commit"
$ git config --global alias.stat "status"
$ git config --global alias.co "checkout"
$ elb-create-lb test-lb --availability-zones us-east-1d --listener "protocol=HTTP, lb-port=80, instance-port=80"
elb-create-lb: Malformed input-Exceeded quota of account xxxxxxxxxx
$ cat /path/to/shindig/php/config/local.php
'PartuzaService',
'activity_service' => 'PartuzaService',
'app_data_service' => 'PartuzaService',
'messages_service' => 'PartuzaService',
'oauth_lookup_service' => 'PartuzaOAuthLookupService',
'extension_class_paths' => '/Library/WebServer/Documents/partuza/Shindig',
'cache_time' => 0,
);
$ cd /path/to/partuza/html/
$ diff -u config.php.org config.php
--- config.php.org 2009-12-15 12:27:12.000000000 +0900
+++ config.php 2009-12-15 12:25:25.000000000 +0900
@@ -20,7 +20,7 @@
$config = array(
// Language to use, used for gettext / setenv LC_ALL
-'language' => 'en_US',
+'language' => 'ja_JP',
// prefix of where partuza lives, empty means it's /
'web_prefix' => '',
@@ -58,7 +58,7 @@
// If you use CacheStorageMemcache as caching backend, change these to the memcache server settings
'cache_host' => 'localhost',
'cache_port' => 11211,
-'cache_time' => 24 * 60 * 60,
+'cache_time' => 0,
$ sudo vi /etc/my.cnf
$ cat /etc/my.cnf
[mysqld]
default-storage-engine=InnoDB
$ mysql -uroot
mysql> create database foo;
mysql> use foo
mysql> create table bar(id int not null);
mysql> show table status bar ¥G
*************************** 1. row ***************************
Table: bar
Create Table: CREATE TABLE `bar` (
`id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
ALTER TABLE テーブル名 ADD PRIMARY KEY (カラム名1[,カラム名2...]);
ALTER TABLE テーブル名 DROP PRIMARY KEY
OperationalError: (1025, "Error on rename of './foo/#sql-b6f_3958' to './foo/bar' (errno: 150)")
mysql> SHOW CREATE TABLE foo;
[mysqld]
slow_query_log = ON
long_query_time = 1.000
log_output = TABLE
min_examined_row_limit=100
$ rds-create-db-parameter-group acme-param-grp -e MySQL5.1 -d "parameter group for acme"
$ rds-modify-db-parameter-group acme-param-grp \
--parameters="name=slow_query_log, value=ON, method=immediate" \
--parameters="name=long_query_time, value=1, method=immediate" \
--parameters="name=min_examined_row_limit, value=100, method=immediate"
$ rds-describe-db-parameters acme-param-grp --source user
DBPARAMETER long_query_time 1 user integer dynamic true
DBPARAMETER min_examined_row_limit 100 user integer dynamic true
DBPARAMETER slow_query_log 1 user boolean dynamic true
$ rds-modify-db-instance acme --db-parameter-group-name=acme-param-grp
$ rds-reboot-db-instance acme
$ rds-describe-db-instances
DBINSTANCE acme 2009-11-04T10:59:28.860Z db.m1.large mysql5.1 100 xxxx available acme.xxxxxxx.us-east-1.rds.amazonaws.com 3306 us-east-1d 1
SECGROUP xxxx active
PARAMGRP acme-param-grp in-sync
mysql > show global variables like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | ON |
+----------------+-------+
1 row in set (0.00 sec)
mysql> show global variables like 'long_query_time';
+-----------------+----------+
| Variable_name | Value |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set (0.00 sec)
mysql> show global variables like 'min_examined_row_limit';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| min_examined_row_limit | 100 |
+------------------------+-------+
1 row in set (0.00 sec)
unicode_str = utf8_data.decode('utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb4 in position 1: unexpected code byte
unicode_str = utf8_data.decode('utf-8', 'ignore')
unicode_str = unicode(utf8_data, "utf-8", 'ignore')
def save(self):
TypeError: save() got an unexpected keyword argument 'force_insert'
def save(self, force_insert=False, force_update=False):
create() and get_or_create() will never update existing objects ¶
In [8670] a change was made to both create() and get_or_create() that affects people in two ways:
Firstly, if you have a custom save() method on your model and it is going to be called using create() or get_or_create(), you should make sure you accept the force_insert parameter (best to accept force_update as well, just like django.db.models.base.Model.save()). You don't have to do anything with these parameters, just pass them through to the Model.save() method.
import urllib2, gzip, cStringIO
def get(uri):
request = urllib2.Request(uri)
request.add_header("Accept-encoding", "gzip")
usock = urllib2.urlopen(request)
data = usock.read()
if usock.headers.get('content-encoding', None) == 'gzip':
data = gzip.GzipFile(fileobj=cStringIO.StringIO(data)).read()
return data
if __name__ == '__main__':
import sys
uri = sys.argv[1:] and sys.argv[1] or 'http://mixi.jp/'
print get(uri)
SHOW CREATE TABLE テーブル名;
show create table bbs_thread;
ALTER TABLE テーブル名 ADD FOREIGN KEY (制約を張りたいカラム) REFERENCES 張りたいテーブル(張りたいカラム);
alter table bbs_thread add foreign key (creator_id) references accounts_user(id);
ALTER TABLE テーブル名 DROP FOREIGN KEY 制約名;
ALTER TABLE bbs_thread drop foreign key creator_id_refs_id_75448b6c;