分类
日记

京京第一次画画

京京的画写给宝宝的话

宝贝,请你慢些长大
爸爸要仔细欣赏
这世间最美的图画

宝贝,请你慢些长大
谢谢你让爸爸知道
原来我是如此幸福的拥有一位艺术大师级的儿子

宝贝,请你慢些长大
让爸爸多看你一刻多抱你一天
多陪你度过春秋冬夏

宝贝,请你慢些长大
肉嘟嘟的小嘴巴,记忆中的小脚丫
爸爸还没来得及感受你
一天一天的变化

宝贝,爸爸猜你画的是一条条线
一头有你,一头是我
你牵着我,我拉着你
我们的爱就像风筝,彼此相连

宝贝,爸爸猜你画的是一方世界
用笔无须来由
一切更没有理由
就这么乱着

宝贝,爸爸猜你画的是未来
纵横交错如网络
永远充满未知
未知是新奇,未知是精彩

让我怀着充满喜悦的心
感谢上天赐我这么可爱的孩子
让我执着蘸满浓墨的笔
书写儿子成长中的第一次画作

宝贝,你是我的HOPE

备注 京京这幅作品是为了参加六一儿童节活动噢。

分类
学习笔记

解决MySQL主从同步错误

可以利用SET GLOBAL sql_slave_skip_counter命令来跳过错误,从而回到正常的运行轨道中。

在从服务器键入以下命令:

slave stop;  停止同步

SET GLOBAL sql_slave_skip_counter =1 ; 执行跳过错误, 后面的参数可以理解为 上面SHOW BINLOG命令显示结果的第几行,例如错误出现在第几行就写几。

slave start; 开始同步,问题解决。

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

时,即说明同步又运行起来了。

相关知识库

背景知识1

在主从库维护中,有时候需要跳过某个无法执行的命令,需要在slave处于stop状态下,执行 set global sql_slave_skip_counter=N以跳过命令。常用的且不易用错的是N=1的情况,但N>1时,则不那么顾名思义,本文详细介绍N的意义,及使用注意事项。

背景知识2

MySQL从库从主库上复制binlog文件内容到本地执行。在binlog上命令以event的形式存在,并非一个命令对应一个event。以一个insert语句为例(引擎InnoDB、binglog_format=statement), 在binlog中实际上有三个event,分别为begin\insert\commit 。 命令类型都是Query_log_event.

而set global sql_slave_skip_counter=N的意思,即为在start slave时,从当前位置起,跳过N个event。每跳过一个event,则N–.

与实际情况不符?

看到这里有同学就会问,这是有问题的。如果当前的执行位置是某个insert语句开头,那使用 N=1实际上是从begin\insert\commit的第二个开始执行,这个insert语句还是不能被跳过?

实际上这里还有两个策略:

1、若N=1且当前event为BEGIN, 则N不变,跳过当前event继续。

2、若N=1且当前event处于一个事务之内(BEGIN之后,COMMIT之前),则N不变,跳过当前event继续。

说明:其实上面两个策略合起来就是一句话,当N=1时,会连续跳过若干个event,直到当前所在的事务结束。

当然如果N>1,则每跳过一个event都要N–.

命令举例:

所以我们平时最常用的N=1的情况,都是下一个事务

假设某个Pos之后执行如下命令( 引擎InnoDB、binglog_format=statement),

insert into t values(x1);

begin;

insert into t values(x2);

insert into t values(x3);

commit;

insert into t values(x4);

你的从库stop在Pos上,假设你要跳过前面几个命令直接执行插入x4的操作,则你的N设置为 4或5或6或7均可。(X1语句为3个event)

其他说明:

上面举例中都特别说明了在innodb引擎和statement模式下。其他情况区别如下:

1、若引擎为myisam(等不支持事务的引擎),且在statement下,则binlog中不会有begin和commit,每个命令都是一个event;

2、row模式的binlog里,一个insert语句实际上是两个event(Table_map_event和 Row_log_event), 计算时应与statement不同。

3、在row模式下,不论引擎是否支持事务,一个insert语句都会加上BEGIN和commit,也即变成4个event。

4、基于InnoDB引擎表的insert/delete/update操作都有显式样的BEGIN /COMMIT.

上面举的这个例子中,若为row模式,则要直接执行X4语句需要设置的N为 5~10均可。

小结:

1、set global sql_slave_skip_counter=N中的N是指跳过N个event

2、最好记的是N被设置为1时,效果跳过下一个事务

3、跳过第N个event后,位置若刚好落在一个事务内部,则会跳过这整个事务

4、一个insert/update/delete不一定只对应一个event,由引擎和日志格式决定

分类
日记 相册

世界这么大,我去登浮山

昨日在朋友家做客,远望浮山海雾升腾,云罩峰顶,甚是壮观。今日一早天公作美,我一口气吃了十多个海蛎子填肚子,报着决不让好日子偷偷溜走的目的,直奔离浮山顶最近的登山口—银川西路。

我来岛城也快半年了,早闻浮山之名。青岛浮山,位于青岛市区,主峰海拔384米。总面积7平方公里,东西长5公里,南北宽2公里,跨市南、市北、崂山三区。浮山最著名的要数花岗石,位于天安门广场的人民英雄纪念碑, 纪念碑的碑心石,是建碑中最主要的一块大石料,称得上是中国建筑史上少有的完整的花岗石,重达百吨,采自青岛浮山大金顶一带。

出发,远处就是今日要登的浮山

IMG_20150503_104608

登山的路。世界这么大,我又好长时间没有出来走走了,进入山路,刚爬了几十步竟然气喘吁吁,远望山头,一路走走歇歇,路上碰到小盆友们奋勇向前,我给他们鼓劲,其实也是不断给自己鼓劲。一山更比一山高,翻过这座是大海,加油少年。无限风光在险峰,翻过去就能看到苍茫大海啦。给驴友们提醒下,浮山上小道多是沙石路,山路陡峭,建议驴友们要准备登山杖和登山鞋、手套等相关装备。

IMG_20150503_112704

一座座山,翻过去就是大海啦

IMG_20150503_110520

走走停停,风光无限好,峻峰说的就是这个。

IMG_20150503_111649

注意看,山顶顶上有个2b青年在呐喊,遗憾我没有长枪炮。

IMG_20150503_112915

IMG_20150503_113825

IMG_20150503_113828

回望来时的路,路渐远,目标就在前方,加油IMG_20150503_114752

峰回路转

IMG_20150503_114814

IMG_20150503_115136IMG_20150503_114929

IMG_20150503_115102

IMG_20150503_115145

IMG_20150503_115519

IMG_20150503_115559

IMG_20150503_115622

IMG_20150503_121036

IMG_20150503_121041

勇者无敌,快看,攀岩强人

IMG_20150503_121127

IMG_20150503_121544IMG_20150503_121154

IMG_20150503_121213

一路走走拍拍,我也登顶了。赶紧喝包牛奶,吃个面包补充能量。顶峰人多,风大,我要看的海呢。山的那边是海,这就是浮山的故事吧。石老人海水浴场好远,雾大或者雾霾大,根本看不清。IMG_20150503_121718

人多,找个休息的石头都好难抢。站着凑合吃了。IMG_20150503_122041

我爱山石,我爱浮山这样的花岗石,大自然是最伟大的艺术大师。IMG_20150503_122055

下山了,不走回头路,跟着手机导航下山,下山的路是大路,完全是砂石路,我走的相当谨慎。庆幸自己早上没有选择这边上山,否则会少许多登山乐趣。IMG_20150503_123122

矿洞吗

IMG_20150503_123129

下山的路。这边山峰同样伟岸俊美

IMG_20150503_123602

IMG_20150503_123635

初夏IMG_20150503_123836

美丽岛城IMG_20150503_124805

分类
学习笔记

Mysql主从同步备份实现

mysql主从方案主要作用:

读写分离,使数据库能支撑更大的并发。在报表中尤其重要。由于部分报表sql语句非常的慢,导致锁表,影响前台服务。如果前台使用master,报表使用slave,那么报表sql将不会造成前台锁,保证了前台速度。

发扬不同表引擎的优点。目前Myisam表的查询速度比innodb略快,而写入并发innodb比myIsam要好。那么,我们可以使用innodb作为master,处理高并发写入,使用master作为slave,接受查询。或在myisam slave中建立全文索引,解决innodb无全文索引的弱点。

热备,slave和master的数据“准实时”同步。

准备工作。先分别安装两台MYSQL。

配置MASTER

[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/home/mysqldata
log-slow-queries=slow_query.txt
log-bin=mysql-bin197
long_query_time=2
skip-locking
skip-name-resolve
skip-innodb
bind-address=192.168.10.197
max_allowed_packet = 256M
query_cache_size=256M
max_connections=2000
max_connect_errors=10000
key_buffer_size=6000M
read_buffer_size=32M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size=256M
tmp_table_size=512M
old-passwords
interactive_timeout=60
wait_timeout=60
connect_timeout=120
table_cache=8192
thread_cache_size=256
sort_buffer_size=64M
back_log = 500
thread_concurrency=32
server-id=1
log-bin=mysql-bin240
binlog-do-db=phpcmsv9
binlog-ignore-db=mysql
expire_logs_days=10

其中,作为主机,server-id必须为1.

binlog_do_db为需要复制的db。 binlog_ignore_db为忽略复制的db。需要增加DB的话,就增加相应的一行。

重启master数据库,运行检查:

show master status;

#需要看到这样的一行,说明binlog已经开启了: log_bin | ON

在master上为slave建立用户

grant replication slave, reload, super on *.* to ‘backup’@’%’ identified by ‘xxxx’;

主机配置完毕。

配置slave

[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir=/usr/local/mysql
datadir=/home/mysqldata
log-slow-queries=slow_query.txt
log-bin=mysql-bin198
long_query_time=2
skip-locking
bind-address=192.168.10.198
skip-name-resolve
skip-innodb
max_allowed_packet = 256M
query_cache_size=256M
max_connections=2000
max_connect_errors=10000
key_buffer_size=6000M
read_buffer_size=32M
read_rnd_buffer_size = 32M
myisam_sort_buffer_size=256M
tmp_table_size=512M
old-passwords
interactive_timeout=60
wait_timeout=60
connect_timeout=120
table_cache=8192
thread_cache_size=256
sort_buffer_size=64M
back_log = 500
thread_concurrency=8
server-id=2
replicate-do-db=phpcmsv9
replicate-ignore-db=mysql
expire_logs_days=10

1.启动主服务器和从服务器服务,在从服务器192.168.17.2上使用命令slave start启动复制;

2.使用命令show slave status;

以前版本mysql从设置要在ini文件上,现在版本命令行设置即可,从服务器根据master的log id 直接这样设置。

change master to master_host=’127.0.0.1′, master_user=’backup’, master_password=’xxxx’, master_log_file=’mysql-bin.000032′, master_log_pos=727525;

互为主从就可以实现双向同步。

show slave status; 出现两个YES就好了。

Slave_IO_State   Waiting for master to send event