看过一本书,总要留下点痕迹
搭建复制的环境,需要一台主服务器master,和一台从服务器slave,把主服务器上的数据备份到从服务器上,过程如下:
1 配置一个服务器作为master
1.1
配置二进制日志 : 这个日志记录了数据的变化,通过这个日志,把主服务器的变化发给从服务器
配置服务器ID:唯一标识
修改my.conf:
1.1.1 log-bin = master-bin (指定二进制日志产生的所有文件的基本名)
1.1.2 log-bin-index = master-bin.index(索引文件,保存所有二进制文件的列表)
1.1.3 server-id = 1
1.2
master上创建复制用户,用于把master上的数据复制到slave
1.2.1 CREATE USER repl_user 创建用户repl_user
1.2.2 GRANT REPLICATION SLAVE ON *.* TO repl_user IDENTIFIED BY 'xyzzy' 给该用户赋予复制的权限,密码为xyzzy
2 配置一个服务器为slave
配置my.conf文件
2.1 server-id : 2
2.2 relay-log-index : slave-relay-bin.index
2.3 relay-log = slave-relay-bin
3 将slave链接到master
使用CHANGE MASTER TO命令使slave指向Master,然后使用 START SLAVE命令启动复制
3.1 CHANGE MASTER TO
MASTER_HOST = "masteri-1"(主机名或ip地址)
MASTER_PORT = 3306
MASTER_USER = 'repl_user'
MASTER_PASSWORD = 'xyxxz'
3.2 START SLAVE
上述是配置过程,配置好了,就可以实现主从复制,下面介绍下原理性的内容
介绍个重要的概念:二进制日志 binary-log
它记录了数据库上的所有改变。执行完毕的数据库语句,会写入二进制日志。
create table test(tmp varchar(100))
insert into test values("1111111111")
select * from test
flush logs(强制轮换二进制日志)
查看二进制文件的内容
show binlog events\G
log-name: master-bin.000001
pos:4
server-id:1
end_log_pos:106
info:server ver:5.1.33
log-name: master-bin.000001
pos:106
server-id:1
end_log_pos:197
info:create table tbl
....省略了后面两个事件,一个是insert,还有一个是flush,pos,end_pos指的是文件的起止位置。
二进制记录了数据库的变化,但是如果master运行了好久,slave从头开始读master的二进制日志,效率太低。
所以可以通过先copy master的数据,在搭建主从复制的环境,实现主从复制,这是效率较高的方式。
1 show master status,显示二进制的当前pos位置,作为复制的起点,从起点往前的所有数据进行备份。
2 锁住master的表,主要锁写
3 mysqldump host=master.1 > backup.sql(生成备份文件,master副本)
4 解锁
5 slave机器上使用备份进行恢复
这样就会完成master的克隆,然后按照复制的步骤搭建主从复制的环境,就可以完成配置。