2014/05/09

MySQL GTID replication 理解深め

★gtid_mode must be ON on all servers or OFF on all servers
★GSo once GTIDs are enabled on all servers, you can have some slaves using file-based positioning and some other slaves using GTID-based positioning.


★GTID関係するパラメータ
mysql> show variables like '%gtid%';
+--------------------------+-----------+
| Variable_name            | Value     |
+--------------------------+-----------+
| enforce_gtid_consistency | ON        |
| gtid_executed            |           |
| gtid_mode                | ON        |
| gtid_next                | AUTOMATIC |
| gtid_owned               |           |
| gtid_purged              |           |
+--------------------------+-----------+


★START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS = 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56
START SLAVE SQL_THREAD UNTIL SQL_AFTER_GTIDS = 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56


★START SLAVE UNTIL SQL_AFTER_MTS_GAPS
==>his statement causes a multi-threaded slave's SQL threads to run until no more gaps are found in the relay log, and then to stop
START SLAVE UNTIL SQL_AFTER_MTS_GAPS should be used before switching the slave from multi-threaded mode to single-threaded mode (that is, when resetting slave_parallel_workers back to 0 from a positive, nonzero value) after slave has failed with errors in multi-threaded mode.

ーーーーーーーーーーー
START SLAVE UNTIL SQL_AFTER_MTS_GAPS;
SET @@GLOBAL.slave_parallel_workers = 0;
START SLAVE SQL_THREAD;
ーーーーーーーーーーー


★MySQL Utilities Launchpad page. ==>python?


★enable GTID replication for an easier rollback in the event of a problem?
どうやる???

★show global variables like 'gtid_executed';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| gtid_executed | d3acef65-d68e-11e3-b9f4-08002760d1b6:1-981 |




+---------------+--------------------------------------------+



★オペレーション
当一个slave接到master, 个新的协议将确保GTIDs的范slave经执行的和已提交但失的事. master然后送除此以外的其它事, 也就是那些slave没有行的.==>依慢的状况为准 !自动比较!
有了一个可靠的slave, 确保任何的事slave上都会被行并且不会因master的事件失而

The only part were we should pay attention is the server we choose for promotion: if it is not up-to-date, data may be lost or replication may be broken.

SLAVE出错了,不知道什么原因。。GRID模式下,大部分都是自动的,变量也是只读的。。。
由于运行在GTID模式,所以不支持sql_slave_skip_counter语法
set global gtid_executed=''; set global gtid_purged=''
ERROR 1238 (HY000): Variable 'gtid_executed' is a read only variable
SLAVE上!
Reset master
Stop slave
Reset slave
还记才的gtid_purged那个点,只需重新置下一个点即可
è????!!
set global gtid_purged='cf716fda-74e2-11e2-b7b7-000c290a6b8f:1-141';

auto_position=0 ,很简单根据指定的 binlog 文件和偏移量, Master binlog 中的各个数据更事务发给备库就好了。备库接收到对应的事,判断是否本机起的 ( 数据更事务记录 server_id 来判断 ) ,如果不是本机起的,就直接行。
auto_position=1 备库将自己的 gtid_executed 的事集合传给 Master Master 找到第一个包含有非备库 gtid_executed 集中数据更的 binlog ,将 binlog 中的各个 event 给备库这样备库首先判断是否本机起的,然后判断来的各个数据更事是否在本机。没有的事都需要在本地行一遍。
Retrieved_Gtid_Set 记录的是 IO thread 从主拿到的事

★回想一下,我之前做的操作:手工除了 binlog 日志和 binlog index 文件,然后启 MySQL 个操作在没有启 GTID MySQL 上,我也做过类似的事情,备库并没有复制失的问题。我手工除了 binlog 以后,数据生成 binlog 。但是在 Master 中,它重新从 9300dd57-51da-11e3-989d-3cd92bee36a8:1 第一个事开始数。从另外一个面来,已经执行完的 GTID 集合, MySQL 并没有独保存,而是通 Binlog 得的。
备库经执行完了 9300dd57-51da-11e3-989d-3cd92bee36a8 :1 - 28123 些事。所以当 SQL thread 拿到从主复制来的更事务时发现这些事都是它已经执的事,那么它就不会再重复行,从而对应些事都会被失掉。如果在某种情况下,我需要在手工除,并启数据,建 auto.cnf 清理掉。这样会生成新的 UUID 备库发现是新的事就会更了
LOAD DATA FROM MASTER;
LOAD TABLE TBLNAME FROM MASTER;

linux java.net.UnknownHostException

新しいサーバーを作って、立ち上がり、いきなり。。
ーーー
InetAddress.getLocalHost()
=>java.net.UnknownHostException
ーーーー

/etc/hosts ファイルの内容は、ホスト名とIPアドレスとの対応表です。
IPアドレスからホスト名を知りたいとき、またはホスト名からIPアドレスを知りたいときに、このファイルが参照されます。
/etc/hostsファイルの書式は以下の通りです。
<アドレス> <ホスト名> [別名 ...]

==>新しいモン追加して、OK

2014/05/07

ant

★ant
ant -buildfile test.xml
ant -buildfile test.xml dist
ant -buildfile test.xml -Dbuild=build/classes dist
-->buildFileをtest.xmlを使う。タスクをdistにする。
 build属性を「build/classes」にする
 
★java言語を使って、新たな機能を追加できる。

★build.xml、eclipseで書く方が楽。

★platform間の溝を埋めるために作った。
=ー>実行できない。。

これだけ、後は使う時調べる。

maven 入門

mvn archetype:generate
->generate project in Interactive mode
・アーキタイプを指定する
=>
デフォルトが203(org.apache.maven.archetypes:maven-archetype-quickstart)になっているので、それを選んでみる
・versionを指定する
・groupIdを指定する
==>これは、何をやっている?
シンプルなクラスつくてくれた。。。。
ーー>test1を作る!

★Mavenでは「リポジトリー」という場所でアーカイブ(jarファイルやソースファイル等)を保管しておき、Mavenで管理された各アプリケーションではそれを参照する。
リポジトリーには「リモートリポジトリー」と「ローカルリポジトリー」がある。
リモートリポジトリーはインターネット上で公開されているリポジトリーで、ローカルリポジトリーは自分のマシン上に(自動的に)構築されたリポジトリー。
Mavenではpom.xmlにアプリケーションが依存(使用)するライブラリーを記述する。
Mavenのコマンドを実行すると、その依存関係に従ってリモートリポジトリーからライブラリー(アーカイブ)をダウンロードしてローカルリポジトリーに格納する。
そして、各アプリケーションはローカルリポジトリー内のファイルを参照して処理を行う。
(例えばローカルリポジトリー内のjarファイルをクラスパスに追加してアプリケーションをコンパイルしたり実行したりする)
==ー>リポジトリー?

★Mavenでは、mvnコマンドのオプションとして「ゴール」を指定して実行する
mvn ゴール 例:clean/test/install:install-file
「プラグイン名:」でプラグイン特有のゴールを指定できる。
http://maven.apache.org/plugins/index.html
いろいろできようね。。
全体像をつかまない。。。。


★プロジェクトをビルドする
cd test1
mvn package
==>bulid,compile,run testClass,
テスト結果が作成される、jarファイルも作成された!!
いろいろやってくれありがとうございます!
※packageはgoalではなく、phaseである。
プロジェクトのlifeCycleでいろんなphaseがある。package前のphaseは全て実行される。
(package?jarファイルを作成すること?)
validate
compile
test
package
intergration-test
verfify
install
deploy
clean
site
------
phaseの下goalがあるの感じ。ディフォルトのgoalもある!


★pom.xml
・下記の座標でプロジェクトを管理する
groupId-->URL/Package
artifactId-->そのグループ中のID
version-->
name-->必須ではない
プロジェクト管理なので、実際のCodeと関係がない。
pomで管理対象を設定するので、pomを修正すれば良い。

★eclipseに導入。。。

mvn eclipse:eclipse
==>windowsでuserのディレクトリの下で、権限の問題でいろいろうまくいかない!!
Cではなく、別のところにしよう。。

★echo %M2_HOME%
=>windowsで

★====>必要な時、plugInを検索して使う。

Why maven



Why maven?
除了写源代,我每天有相当一部分时间花在了编译、运行测试、生成文档、打包和部署等烦琐且不起眼的工作上,是构建
一直在不停地找避免重复的方法。设计的重复、编码的重复、文档的重复,
当然有构建的重复。Maven最大化地消除了构建的重复,抽象了构建生命周期,并且为绝大部分的构建任提供了已实现的插件,我不再需要定义过程,甚至不需要再去实现这程中的一些任
简单的例子是测试,我没必要告Maven测试,更不需要告Maven如何运行测试,只需要遵循Maven写好测试用例,当我运行构建的候,测试便会自运行

个开源的年代里,几乎任何Java用都会借用一些第三方的开源类库类库都可通的方式引入到目中来。随着依的增多,版本不一致、版本冲突、依问题都会接踵而来。手工解决问题是十分枯燥的,幸运的是Maven提供了一个秀的解决方案,它通一个坐准确地定位每一个构件(artifact),也就是通Maven找到任何一个Java类库(如jar文件)。Maven给这类库世界引入了经纬们变得有秩序,于是我可以借助它来有序地管理依松地解决那些繁的依赖问题

只要定位了坐Maven就能帮我,省去了手工劳动
★これみたいな物!
使用脚本建立高度自定的构建系就像买组PC,耗时费力,果也不一定很好。当然,你可以享受从无到有的趣,但恐怕实际项目中无法你那么多时间。使用Maven就像购买品牌PC,省省力,并能得到成熟的构建系能得到来自于Maven社区的大量支持。

MAVEN VS IDE
IDE能大大提高开效率。当前主流的IDEEclipseNetBeans等都提供了大的文本编辑调试甚至重构功能。然使用简单的文本编辑器和命令行也能完成大部分开工作,但很少有人愿意那做。然而,IDE是有其天生缺陷的: 
 IDE大量的手工操作。编译测试、代生成等工作都是相互独立的,很
完成所有工作。手工劳动往往意味着低效,意味着容易出   
目中一所有的IDE配置,每个人都有自己的喜好。也正是由于个原因,一个在机器A上可以成功运行的任,到了机器BIDE中可能就会失 
们应该合理利用IDE,而不是多地依它。于构建这样的任,在IDE中一次次地点是愚蠢的行Maven方面的家,而且主流IDE都集成了Maven


MAVEN VS ANT
MakeAnt也都是程式的,开式地指定每一个目,以及完成所需要行的任针对每一个目,开者都需要重新程,里其实隐含着很大的重复。Maven是声明式的,目构建程和程各个段所需的工作都由插件实现,并且大部分插件都是成的,开者只需要声明目的基本元素,Maven行内置的、完整的构建程。在很大程度上消除了重复。 
Ant是没有依管理的,所以很一段时间Ant都不得不手工管理依是一个令人疼的问题。幸运的是,Ant户现在可以借助Ivy管理依。而Maven,依管理是理所当然的,Maven内置了依管理,更有一个可能有全世界最多Java开源件包的中央仓库Maven须进行任何配置就可以直接享用

Maven真比自己的“范化Ant”大?其他不知道自己只是在重新子,Maven有一大把成的插件,全世界都在用,你自己不用写任何代 什么没有人“我自己写的代最灵活,所以我不用Spring,我自己实现IoC;我不用Hibernate,我自己封装JDBC”