MySQL复制设置及相关维护操作

1. 主库服务器配置

主服务器MySQ配置参数,参数主要依据《高性能MySQL 第三版》

#replication safe for innodb engine
innodb_flush_logs_at_commit
innodb_support_xa=1


#replication
server-id=100
log-bin=mysql-bin
log-error=mysql-bin.err
expire_logs_days=30
sync_binlog=1

2. 添加复制用户

只需要赋两个全局的权限: REPLICATION SLAVE, REPLICATION CLIENT

CREATE USER 'repl'@'192.168.10.132' IDENTIFIED BY '***';
GRANT REPLICATION SLAVE , REPLICATION CLIENT ON * . * TO 'repl'@'192.168.10.132' IDENTIFIED BY '***';

3. 备份主库,备份中加入binlog及位置

全面备份主库,备份前需要已经启用二进制日志。

mysqldump -hlocalhost --opt --master-data=1  --all-databases --max_allowed_packet=8M --net_buffer_length=128K -uroot -pyour-password >all.sql

为了获得一致性的备份,考虑加入参数--single-transaction 或 --lock-all-tables,分别针对事务型引擎及非事务型引擎,但它们不能同时使用。

注意其中--master-data=1参数,它将binlog及位置信息生成到备份文件中,大概如下一行

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=8747725;

4.iptables放行备库连入

针对从服务器ip到本地3306端口的连接

iptables -I INPUT 7 -s 192.168.10.132/32 -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

5. 配置从服务器

server-id=201
log-bin=mysql-bin
relay_log=/var/lib/mysql/mysql-relay-bin
log_slave_updates=1
expire_logs_days=30
read_only=1

6. 还原到从库服务器上

SOURCE /path/to/bakup.sql;

6. 配置从库,连接到主库

事实上下面的log_file,log_pos可以不用再指定,因为备份里已经有该信息并还原到这里了。当然再指定一次也没负作用。

change master to master_host='192.168.10.100', 
master_user='repl',
master_password='repl-password', 
master_log_file='mysql-bin.000004', 
master_log_pos=8747725;

7. 启动slave

start slave

完成

x. 如果异常,复制失败时,或许需要重配置slave才可以解决问题

 

stop slave;
RESET SLAVE;
SOURCE /path/to/bakup.sql;
RESET SLAVE;
change master to ...
show slave status; #检查状态,确认主库及连接账号等
START SLAVE;

附记注意事项:

  • 关于binlog_format 参数。在mysql 5.5(win32)版下,该参数默认值为STATEMENT。于是,至少有以下问题insert into tablename select ... limit n这样的语句,执行时会报warning错误,原因是limit结果在一致性上是非安全的。

end

VIM复制命令详解

yank 是什么意思?有疑问的请查一下字典吧!就好像是中医治疗中的「拔罐」的意思啦(是不是叫「拔罐」?知道的朋友指正一下吧)!反正在 Vim 中,她就是复制 copy 的意思。这在 Vim 的思考逻辑里,就是「拔」yank 起来,「放」put 上去。其实复制的指令就是 y 一个而已,为什么要独立成一个单元来说明呢?因为 Vim 复制、贴上的功能实在太独特了,再配合第三单元介绍的数目字,及 Vim 内部的缓冲区来使用的话,您会发现,原来 Vim 肚子里还暗藏着秘密武器。

4.1 指令说明
yy 复制游标所在行整行。或大写一个 Y。
2yy 复制两行,y2y 也可以。ㄟ,请举一反三好不好!:-)
y^ 复制至行首,或 y0。不含光标所在处字符。
y$ 复制至行尾。含光标所在处字符。
yw 复制一个 word。
y2w 复制两个字。
yG 复制至档尾。
y1G 复制至档首。
p 小写 p 代表贴至光标后(下)。
P 大写 P 代表贴至光标前(上)。整行的复制,按 p 或 P 时是插入式的贴在下(上)一行。非整行的复制则是贴在游标所在处之后(前)。
"ayy 将本行文字复制到 a 缓冲区。
a 可为 26 个英文字母中的一个,如果是小写的话,原先的内容会被清掉,如果是大写的话是 append 的作用,会把内容附加到原先内容之后。" 是 Enter 键隔壁的那一个同上符号(ditto marks),当然是要和 shift 键同时按的。
"ap 将 a 缓冲区的内容贴上。
这个缓冲区的术语在 Vim 称为 registers,Vim 扩充了相当多的功能。您用 d、c、s、x、y 等指令改变或删除的内容都是放在 registers 中的。例如:您用 dd 删除的一行,也是可以使用 p 来贴上的。只要是在缓冲区的内容都可以使用 p 来贴上,不是一定要 y 起来的内容才能用 p。因此您认为 p 是 paste 也可以,认为是 put 可能较正确。
5"ayy 复制五行内容至 a 缓冲区。
5"Ayy 再复制五行附在 a 内容之后,现在 a 中有十行内容了!
ㄟ!不要我一直用 a 您就认为只有 a 可以用喔。26 个英文字母都可以的,交叉运用下,您会发觉 Vim 肚量不小。
问题来了!忘记谁是谁的时候怎么办? :reg(冒号命令)就会列出所有 registers 的代号及内容。您现在就试着按看看。咦!怎么还有数目字、特殊符号的缓冲区,原来您刚刚删除(复制)的内容就预设放在 " 这个缓冲区,然后依序是 0,1,2,...9。也就是说您按 p 不加什么的话,是取出 " 缓冲区的内容。% 指的是目前编辑的档案,# 指的是前一次编辑的档案。还有其它的呀!这会在下一节做介绍。
Tab 补全的功能,elvis 也有,但叫出 registers 列表的命令则没有,您得自行记忆在您的脑袋瓜子里。而且 elvis 的补全能力并没 Vim 强。

4.2 Register 缓冲区
在 Vim 里头,有许多不同种类的缓冲区,例如:置放一整个档案的 buffers 缓冲区(请参考第 6.2 节,页 );档案内容操作,如删除、yank、置换,给 Put 要用的 registers 缓冲区;另外还有给书签要用的 marks 缓冲区(请参考第 5.4 节,页 )。虽然这些内容不一定是放在 RAM 内存内,有的是置于硬盘档案上,需要时才从档案存取,但这里通通把他当做是缓冲区,以方便理解。
4.2.1 register 的种类

4.3 天大的指令
. 这是什么?ㄚ,是英文句点啦!没错,就是英文句点。什么意思?重复前次的编辑动作。这个指令太高明了,只要是编辑动作(移动光标不算,冒号命令也不算)都可以按英文句点来重复,要重复几次都可以。
例如:您按了 yy,然后按 p 就会复制、贴上一整行,如果要重复这个动作的话,就可以按 . ,也可以把光标移到其它地方后再按。其它 dd,dw,r,cw 等编辑指令都可以这样来重复。如果您要重复做某些编辑动作时,千万千万一定要想到有这么一个英文句点重复指令。ㄚ,拜托啦!您一定要常用这个指令。

4.4 疑难杂症
4.4.1 那 mouse 中键的剪贴功能还有吗?
当然还有,不管在 console 或 X terminal 中都照用不误。当然在 windows 下的话就不能用了,可以用 Shift+Insert 来代替。Ctrl+v 在 Vim 中另有作用,在 windows 下就不必去麻烦它了。
4.4.2 软件间互相 copy 时,常常都搞得天下大乱耶!
要设成 :set paste。这是 Vim 的扩充功能,elvis 没有。那在 elvis 怎么办?只好 :set noai4.1 了。在 GUI 的版本应不会有这种情形。
朋友!您睡着了吗?不要被吓到了,您只要开个档案,亲自操作一下就能心领神会。那用 mouse 不是更方便吗?不见得,yyp 来复制贴上一整行比较快,还是用 mouse 来拉比较快?您可以试看看。

from http://www.demix.cn/h?z=27993