Androidアプリ開発したい!

IT屋がGalaxySを手に入れてからAndroidに興味が湧き、いろいろと開発したりしてます。 GalaxyNexusがメイン機となり、ようやく普及し始めたAndroid4.0への関心が高いです。 仕事では、iPhone向けとかのソシャゲ作ってます。

MySQL

AWSにmysqlをインストールする

yumでmysqlをAWSのEC2上にインストール

$ sudo yum install mysql-server
... 省略

AWS用のmy.cnfがあるみたいなのでそれにする

$ sudo mv /usr/share/mysql/my-medium.cnf /etc/my.cnf

やっぱutf-8ですよね。

$ sudo vim /etc/my.cnf
... 省略
character-set-server=utf8

そして起動してみた。けどエラー。。。

$ sudo /etc/rc.d/init.d/mysqld start
MySQL Daemon failed to start.
mysqld を起動中:                                           [失敗]

失敗しか言わない!ので、エラーログみてみます。

$ sudo view /var/log/mysqld.log
... 省略
130707 22:45:53 [ERROR] /usr/libexec/mysqld: Can't find file: './mysql/host.frm' (errno: 13)
130707 22:45:53 [ERROR] Fatal error: Can't open and lock privilege tables: Can't find file: './mysql/host.frm' (errno: 13)

/var/lib/mysqlの権限がroot:rootなのがダメみたい。なんでやねん!!ということでmysql:mysqlに変更

$ sudo chown -R mysql:mysql /var/lib/mysql

再び起動してみる。

$ sudo /etc/ini.d/mysqld start
mysqld を起動中:                                           [  OK  ]

わーい!ヽ(=´▽`=)ノ

パスワード変更など

と、ここで終わると危ないので、rootのパスワードとか変更するためにmysql_secure_installationしますよ。

$ mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

root パスワード変えるので[y]いれて新しいパスワードを2回入力


Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

ルートユーザー以外のデフォルトユーザは削除しますので[y]で。


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

リモートからのルートログインはしませんので[n]で。


Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
	
Disallow root login remotely? [Y/n] n
 ... Success!

テスト用のデータベースもイラナイので削除[y]で。


By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
	
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

いますぐ設定反映させます。[y]で。


Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
	
Reload privilege tables now? [Y/n] y
 ... Success!
	
Cleaning up...
	
	
	
All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.
	
Thanks for using MySQL!

おつ!!

mysqlコンソール起動してみる

$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 5.5.31-log MySQL Community Server (GPL)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

大丈夫そうです。

一応testテーブル削除されてるかとか確認。

mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

OK!!!バッチリですね。

yumでMySQLをinstallした後に改めてrpmでMySQLをinstallする時のメモ

今回は、以前yumでインストールしたMysql 5.1をアンインストールして、
rpmでMySQL5.5.24をインストールします。


まず大事なデータベースはバックアップ!

[root@localhost /]# mysqldump -u root -p****** > springdump.sql

※******はパスワード

yumでインストールしたMySQLをアンインストール

[root@localhost home]# yum remove mysql


同じくライブラリもアンインストール

[root@localhost home]# yum remove mysql-libs

※これを消さないとrpmインストール時に
「ファイル /usr/share/mysql/charsets/cp1256.xml (パッケージ MySQL-server-5.5.24-1.linux2.6.i386 から) は、パッケージ mysql-libs-5.1.61-1.el6_2.1.i686 か らのファイルと競合しています。」
みたいなエラーが一杯でて失敗します。

モジュールをダウンロード

[root@localhost home]#  wget ftp://ftp.iij.ad.jp/pub/db/mysql/Downloads/MySQL-5.5/MySQL-5.5.24-1.linux2.6.i386.tar
 

MySQL-serverをインストール

[root@localhost home]# rpm -ihv MySQL-server-5.5.24-1.linux2.6.i386.rpm
準備中...                ########################################### [100%]
ls: cannot access /var/lib/mysql/*.err: そのようなファイルやディレクトリはありません
ls: cannot access /var/lib/mysql/*.err: そのようなファイルやディレクトリはありません
   1:MySQL-server           ########################################### [100%]

MySQL-clientをインストール

[root@localhost home]# rpm -ihv MySQL-client-5.5.24-1.linux2.6.i386.rpm
準備中...                ########################################### [100%]
   1:MySQL-client           ########################################### [100%]


インストールの確認

[root@localhost home]# rpm -q MySQL-client
MySQL-client-5.5.24-1.linux2.6.i386

[root@localhost home]# rpm -q MySQL-server
MySQL-server-5.5.24-1.linux2.6.i386

※ちなみに本来はmy.confとか色々用意しなければいけないが、
yumでのインストール時に作成されているのでそれをそのまま使う!!!

MySQLを起動

[root@localhost init.d]# /etc/init.d/mysql start
Starting MySQL... SUCCESS!


起動を確認

[root@localhost init.d]# ps -ef | grep mysql
root      2881     1  0 09:32 pts/1    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/localhost.localdomain.pid
mysql     2959  2881  4 09:32 pts/1    00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/lib/mysql/localhost.localdomain.err --pid-file=/var/lib/mysql/localhost.localdomain.pid
root      2983  2408  0 09:32 pts/1    00:00:00 grep mysql


MySQLに接続

[root@localhost init.d]# mysql -u root -p******
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.24 MySQL Community Server (GPL)

Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


※******はパスワード

データベースの確認

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| spring             |
+--------------------+
3 rows in set (0.00 sec)


springテーブルに切り替える

mysql> use spring;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed


以前作成したテーブルの中身を確認

mysql> show tables;
+------------------+
| Tables_in_spring |
+------------------+
| CARD             |
+------------------+
1 row in set (0.00 sec)

mysql> select * From CARD;
+--------------------------------------+---------------+
| ID                                   | NAME          |
+--------------------------------------+---------------+
| 0001                                 | test          |
| e927e9ac-9b0d-40fb-979b-9f33175f0e61 | No Name       |
| f7c5fc57-d93d-4eb6-9059-adc0a89bdb5e | No Name       |
| 0e1ef8c2-aa36-4567-89d4-aab7537b4317 | No Name       |
| 814df8ec-4fc5-43ae-bbaa-2269b6f7f645 | Sample Update |
| 3b5da608-c815-4ea2-b777-fc235c95b51c | No Name       |
| 940a15ef-41ab-4280-a683-ffb780833154 | No Name       |
| 82cd6cc9-67d1-4495-a5d1-a1a0204cb42b | No Name       |
| c7882ae2-68e3-4df7-8917-b2233589dc32 | No Name       |
| 5bea357b-4e55-4187-b745-0c490d487db6 | No Name       |
| 9b8370e5-03f0-4ea0-b41b-0cc5f6d05b16 | No Name       |
| 316ff874-0866-4ed8-8bba-fffd1215fc3f | No Name       |
| 103cf3d2-4988-4fd6-9c28-6340d8f2e0ee | No Name       |
+--------------------------------------+---------------+
13 rows in set (0.00 sec)

ちゃんとデータも残ってる!
ってか、そもそもアップグレードすればよかったのでは?と思ってしまったが、
まあrpmでのインストールもやってみたかったので、
これはこれでよしとしよう。


616a77db.png

MySQLについて復習してみた(MySQL 5.5)

【MySQL特徴】

・手軽さ
・あらゆる面で「マルチ」な特性
・冗長性と負荷分散
・オープンソース
・デュアルライセンス
・企業の後ろ盾


■手軽さ

・リソースの少ない環境でも利用できるように配慮されている。
 ⇒最少で16MBのメモリがあれば動作する

・インストールも簡単で、バイナリ版があれば、
 パッケージを入れるか必要なファイルを展開して保存するだけですぐに利用可能な状況となる

・各種データがシンプルなファイルに保存されている
 ⇒バックアップやデータベースの異動などを簡単に行える

・必ずしも設定ファイルは必須ではない

・多くのOSで動作する

■あらゆる面で「マルチ」な特性

・日本語の文字コードも含めて各種キャラクタセット(文字コード)に対応している

・C, Ruby, PHP, Perl, Pythonなど多くの開発言語に対応している

・サーバーはマルチスレッド方式で動作する
 ⇒フォークよりも軽いため、複数の処理を同時に実行でき、サーバのトータルとしての効率を上げることができる

・用途に合わせて最適なエンジンを選ぶことができる(マルチストレージエンジン採用)
 ⇒特別なチューニングをすることなく、データベースの性能をあげることができる
 ⇒同一DB内で複数のエンジンを同時に扱うことも可能(InnoDBを選択した場合、トランザクションが利用できる)

■冗長性と負荷分散

・レプリケーション構成(データベースを複製する)を簡単にセットアップできる
 ⇒負荷分散(複数のMySQLにデータを分ける)
 ⇒データのバックアップ
 
 ※ストレージエンジンのNDBを使うことで、本格的な冗長化構成(NDBクラスタ)をとることも可能


【MySQLの歴史メモ(細かいのは省略してます)】


・レプリケーション
 ⇒3.23から対応

・副問い合わせ(サブクエリ)
・NDBクラスタ(MySQLクラスタ)
 ⇒4.1から対応

・ストアドプロシージャ、ビュー、トリガー
 ⇒5.0から対応

・行ベースのレプリケーション
・パーティショニング
・イベントスケジューラ
 ⇒5.1から対応

・InnoDBの大幅な改善とデフォルトエンジンになった
・準同期レプリケーション
 ⇒5.5から対応


【レプリケーション】


[概要]
あるMySQLサーバーで更新されたデータを別のMySQLサーバに複製する機能のことをいう。
マスターからスレーブへの複製は非同期で行われるため、
マスターを更新した直後にスレーブにデータが反映されるとは限らない。
主な用途としては、負荷分散やバックアップに使用される。

※1 複製元のサーバーをマスターと呼ぶ
※2 複製先のサーバーをスレーブと呼ぶ

・一つのマスターに対して複数のスレーブを設定することが可能
(逆に一つのスレーブに複数のマスターはは設定できない)

・あるスレーブを別にサーバーのマスターとすることは可能
 ⇒これを利用して循環構成を作ることが可能

[負荷分散]

・更新クエリを1台のマスターに対して行い、参照クエリを複数のスレーブに対して行う
 ⇒参照クエリを分散させることができる

[高可用性]

・マスターがダウンしてもスレーブにデータがある
 ⇒クライアントのリクエスト先をマスターからスレーブに変更すれば、サービスを継続することができる

※ただし、レプリケーションは非同期なので、マスターで成功した更新が必ずスレーブに複製されているとは限らない
 ⇒準同期レプリケーションを利用することで、複製を保障することは可能

[バックアップ]

・データベースをテープや別のディスクにバックアップする安全な方法は、
 停止してから丸ごとコピーすることだが、その間データベースが使えなくなってしまう
 ⇒レプリケーションを行い、スレーブ側でバックアップを取るようにすることで、
  マスター側を停止することなくバックアップが行える



【準同期レプリケーション】


[概要]
スレーブにデータが転送されてからクライアントに応答を返すことにより、
クライアントに成功応答が返ったクエリ結果のデータがスレーブ側にも存在することが確実となる。

 [メリット]
  スレーブとマスターの内容が同期されていることが保障されるため、
  レプリケーションをバックアップとして使用するときは有用

 [デメリット]
  スレーブへのデータ転送を待つため、
  通常の非同期レプリケーションよりクライアントへの応答が遅くなる


【パーティショニング】


[概要]
テーブルを分割して性能を向上させるための技術。
⇒1つのテーブルを分割することによって、高速化や要領拡大を実現

・パーティショニングはテーブル作成時に指定する
 ⇒CREATE TABLEステートメントの最後にパーティショニングの指定を行う

・テーブルの基本的動作は、通常のテーブルと変わりないため、データの操作でパーティショニングを意識する必要はない




【イベントスケジューラ】


[概要]
SQL文をあらかじめ登録したタイミングで実行するための技術。
⇒処理を自動化して運用効率を高める
⇒定期的に実行するSQLを登録することで、システム機能を充実させるなど


・パーティショニングはテーブル作成時に指定する
 ⇒CREATE TABLEステートメントの最後にパーティショニングの指定を行う

・テーブルの基本的動作は、通常のテーブルと変わりないため、データの操作でパーティショニングを意識する必要はない


持ってる端末
・Galaxy S root化済    (2.3.6)
・Galaxy Nexus          (4.1.1)
・GALAPAGOS A01SH (4.0.4)
・ONDA Vi10              (4.0.3) 
・iPod Touch           (iOS 6.0)
記事検索
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

  • ライブドアブログ