MySQLレプリケーションの動作確認と不具合時の復旧方法

【動作不具合時の確認方法】

スレーブサーバで、

mysql> show slave status\G;
・
・
Read_Master_Log_Pos: 424597747
・
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

〜RunningがNoになっていたらレプリケーションが止まっています。

マスターサーバで、

mysql> show master status\G;
File: mysql-bin.000108
Position: 424597871

Positionの値とスレーブサーバのRead_Master_Log_Posの値が異なっていると×です。


【復旧方法】
スレーブサーバで、

mysql> stop slave;
mysql> show slave status \G;
・
・
Slave_IO_Running: No
Slave_SQL_Running: No

となっていることを確認し、

mysql> reset slave;

を実行。

それからスレーブサーバで、

mysql> CHANGE MASTER TO
    -> MASTER_HOST='ホスト名',
    -> MASTER_USER='マスターユーザ名',
    -> MASTER_PASSWORD='マスターパスワード',
    -> MASTER_LOG_FILE='mysql-bin.000108', //マスターサーバの情報
    -> MASTER_LOG_POS=424597871; //マスターサーバの情報
mysql> slave start;
mysql> show slave status \G;
・
・
Read_Master_Log_Pos:424597871
・
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

となっていること確認

HTML5とは

勉強会に参加したので、簡単にメモ

【全般】
・広義の意味ではmarkup,css,js,websocketなどフレームワーク全体を指す
・現状ブラウザの対応状況としては、以下のような感じ

	safari > chrome > firefox > opera >>>> ie

xhtmlは凍結し、html5移行
・基本的に、markupはシンプルに、定型的な記述で省略可能なものは省略可に


【どんなことができるのか?】
Flashのように文字がくるくる回るような動きが、cssのみで記述できる
Flashにしか見えない、画像内で落ち葉が落ちてくるような動きが、cssと少しのjsだけで記述できる
・formタグの設定だけで、日付入力部分にカレンダーを出したり、URL/e-mail形式などのバリデーションが可能


【関連技術として】
javascript canvas (描画ツール)
・web sockets

httpの拡張プロトコル。サーバからブラウザにデータを送れる、プッシュ型の通信が可能。
cometのような技術。※今後はcomet→web socketsに移行していくのではと予想される

sqliteが組み込まれ、DB接続が可能となる

入力された行列の転置行列を求めよ

プログラミングスレまとめ in VIPの練習問題を解いてみた
練習問題 - プログラミングスレまとめ in VIP

import java.util.*;

class Tenchi {
	private static int[][] getGyouretu() {
		Scanner scan = new Scanner(System.in);
		System.out.println("何行何列の行列を入力しますか?");
		System.out.println("行:");
		int gyou = scan.nextInt();
		System.out.println("列:");
		int retu = scan.nextInt();
		
		// 返却する行列
		int[][] gyouretu = new int[gyou][retu];
		
		System.out.println("行列を入力して下さい。数字は,で区切って下さい");
		// 1行づつ作成
		for (int i = 0; i < gyou; i++) {
			// 入力列数が正しいか判定
			boolean retusu_flag;
			do {
				retusu_flag = false;
				String input = scan.next();
				String[] input_arr = input.split(",");
				
				if (retu != input_arr.length) {
					retusu_flag = true;
					System.out.println("列数が不正です。再度入力して下さい。");
				} else {
					// string型をint型にキャストしてgyouretuに格納
					for (int j = 0; j < input_arr.length; j++) {
						gyouretu[i][j] = Integer.parseInt(input_arr[j]);
					}
				}
			} while (retusu_flag);
		}
		
		return gyouretu;
	}
	
	public static void main(String[] args) {
		
		//入力行列
		int[][] gyouretu = getGyouretu();
		
		/*
		// test出力
		System.out.println("\n入力行列は");
		for (int[] hairetu : gyouretu) {
			for (int i : hairetu) {
				System.out.print(i);
				System.out.print(" ");
			}
			System.out.println("");
		}
		*/
		
		//転置行列作成
		int[][] tenchi = new int[gyouretu[0].length][gyouretu.length];
		for (int j = 0; j < gyouretu[0].length; j++) {
			for (int i = 0; i < gyouretu.length; i++) {
				tenchi[j][i] = gyouretu[i][j];
			}
		}
		
		System.out.println("\nこの転置行列は");
		for (int[] hairetu : tenchi) {
			for (int i : hairetu) {
				System.out.print(i);
				System.out.print(" ");
			}
			System.out.println("");
		}
	}
}

妙に長くなってしまいました。結構面白かったです。

複雑系―科学革命の震源地・サンタフェ研究所の天才たち ★★★★

以前から気になっていたので読んでみました。内容は以下のキーワードから想像して下さい。
・収束逓増
・自己組織化
・人工生命
創発
・進化
相転移
って良く分かりませんよね(笑)
ただ実際にある意味非常に分かりにくい本です。経済学、物理学、生物学、コンピュータサイエンスなど既存の学問を、複雑性という観点から、切り込んでいく内容となっています。
いわゆる科学ドキュメンタリーの構成をとっており、ノーベル賞クラスの経済学者・物理学者から、ちょっと変わった大学院生まで複雑系に惹かれた優秀な研究者が、サンタフェ研究所に集い、互いに意見を交わし、どんどんアイデアを発展させていくといったものです。ただ、後半は似たような考えや概念が多くなり、ちょっと冗長な感じがします。そして専門的な話や観念的な話が多くなって難しい。。全体としてやや長かったので、後半1/3ぐらい削った方が良かったかなと思います。
とはいえ、前半はサイモン・シンの「フェルマーの最終定理」を思わす面白さです。登場する学者達は、秩序とカオスの中間地点(一見ランダムなようで実はある程度規則性がある)を「カオスの淵」と呼び、実世界はまさにカオスの淵にあると主張しています。
株価・生物の進化・生命の誕生・人間の心理などは均衡状態にあるきれいなものではなく、ダイナミックで単純な数式では表せないものであり、そもそもこの宇宙がそのように出来ている、と彼らは睨んでいます。後半は、少し哲学的な内容になっていきます。脱構造主義エコロジーなどが好きな方もきっと楽しめると思います。

複雑系―科学革命の震源地・サンタフェ研究所の天才たち (新潮文庫)
M.ミッチェル ワールドロップ Mitchell M. Waldrop 田中 三彦 遠山 峻征
新潮社
売り上げランキング: 91759
おすすめ度の平均: 4.5
5 実は、現代科学が明確に言及できる領域は、一般の方が思うよりずっと狭いのである。他の科学は?ずっとずっと狭いんです。
5 近年の脳科学にも通じる「複雑系とはなにものか」を知るには最適の1冊。
4 はじまりは期待されていなかった
4 History of Sciences of Complexity
3 当時は感心したが...

Caesar暗号を解読するプログラムを作り,暗号を解読してください

プログラミングスレまとめ in VIPの練習問題を解いてみた
練習問題 - プログラミングスレまとめ in VIP

import java.util.*;

class Caesar {
	private static final String ANGO = "qdq-gi.q-a ziatmxxitmdqibtqi-ustbi ri.qmoqrcxi.qbubu zir -ibtqi-qp-qaai ripmymsqkir -ibtqi-qy dmxi ri.cnxuoi rruoumxakir -ibtqiqzmobyqzbkii-q.qmxi -imyqzpyqzbi rixmeaki -puzmzoqai -i-qscxmbu zaimzpir -i btq-iymbbq-a;iz -iatmxximzgi.q-a zinqiuzimzgiemgipuao-uyuzmbqpimsmuzabir -ia. za -uzsiacotiimi.qbubu zj";
	private static final String DICTIONARY = "abcdefghijklmnopqrstuvwxyz .,-";
	private static final String SEARCH = "person";
	
	private static String shiftChar(String ori_str, int index) {
		String new_str = "";
		
		for (int i = 0; i < ori_str.length(); i++) {
			char c = ori_str.charAt(i);
			int match_index = DICTIONARY.indexOf(c);

			//ori_strをDICTIONARYを使いindex分だけシフトさせる(-の次はaになる)
			if (0 <= match_index) c = DICTIONARY.charAt((match_index + index) % DICTIONARY.length());
			new_str += c;
		}
		
		return new_str;
	}
	
	public static void main(String[] args) {
		for (int i = 0; i < DICTIONARY.length(); i++) {
			String shift_char = shiftChar(ANGO, i);
			if (0 < shift_char.indexOf(SEARCH)) {
				System.out.println(shift_char + "\n*ずらした文字は " + i);
				break;
			}
		}
	}
}

これは、結構時間がかかってしまいました。かなり面白かったです。

フィボナッチ数列の第n項を求めるプログラムを書いて下さい

プログラミングスレまとめ in VIPの練習問題を解いてみた
練習問題 - プログラミングスレまとめ in VIP

import java.util.*;

class Fibo {
	//リストを与えるとその最後の2つの値を足したものをリストの最後に加えて返却する
	private static List<Integer> plus(List<Integer> ori) {
		int ori_size = ori.size();
		ori.add(ori.get(ori_size - 1) + ori.get(ori_size - 2));
		return ori;
	}
	
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		int n = scan.nextInt();

		System.out.println("");
		
		List<Integer> fibo = new ArrayList<Integer>(n);
		fibo.add(1);
		fibo.add(1);
		
		for (int i = 0; i < n-2; i++) {
			fibo = plus(fibo);
		}
		
		for (int i : fibo) {
			System.out.println(i);
		}
	}

}

ソースコードはたまに公開するべきだと思う今日この頃です。横着な性格なので、誰にも見られないと思うと、すぐ汚いコードを書いてしまいます。それが癖になるのが怖いのでこのように公開しています。

数当てゲーム(適当な数を入力し、その桁と数字を予測していくゲーム)

これはn桁の数を探すゲームです。適当な数を入れると桁も数字もあっていれば「Hit」としその個数が、数字はあっているが桁が異なっていれば「Blow」としてその個数が出力されます。それを繰り返すことで答えを探すことができます。このゲームを作成しなさい。答えの数は乱数を使って毎回別の答えを用意しましょう。
練習問題 - プログラミングスレまとめ in VIP

//答え
import java.util.*;

class HitBlow {
	//正解の数をランダムで作成する
	private static char[] getSeikai() {
		Random rnd = new Random();
		char[] seikai_char = new char[7];
		
		boolean zoro_flag = true; //作成された数字の中にぞろ目があればtrue
		while (zoro_flag) {
			zoro_flag = false;
			String seikai = Integer.toString(rnd.nextInt(10000));
			//System.out.println(seikai);
			seikai_char = seikai.toCharArray();
			
			for (int i=0; i < seikai_char.length; i++) {
				for (int j=i+1; j < seikai_char.length; j++) {
					if (seikai_char[i] == seikai_char[j]) zoro_flag = true;
				}
			}
		}
		
		return seikai_char;
	}
	
	public static void main(String[] args) {
		char[] seikai_char = getSeikai();

		while(true) {
			System.out.println("ぞろ目がない数を入力して下さい。");
			Scanner scan = new Scanner(System.in);
			String input = scan.next();
			char[] input_char = input.toCharArray();
			
			// hitを探す
			//正解とインプットの短い方の長さまででhitを探す
			int search_length = input_char.length;
			if (search_length > seikai_char.length) search_length = seikai_char.length;
			for (int i = 0; i < search_length; i++) {
				if (input_char[i] == seikai_char[i]) {
					input_char[i] = 'h';
				}
			}
			
			// hit以外からblowを探す
			for (int i = 0; i < input_char.length; i++) {
				if (input_char[i] != 'h') {
					for (int j = 0; j < seikai_char.length; j++) {
						if (input_char[i] == seikai_char[j]) {
							input_char[i] = 'b';
						}
					}
				}
			}
			
			int hit_count = 0;
			int blow_count = 0;
			for (char c : input_char) {
				if (c == 'h') hit_count++;
				if (c == 'b') blow_count++;
			}
			System.out.println("hit: " + hit_count);
			System.out.println("blow: " + blow_count);

			if (hit_count == seikai_char.length) {
				System.out.println("正解です!");
				break;
			}
		}
	}
}

これは面白かったです。数当て難しいですね。おかげで動作確認に時間がかかりました。