MYSQL通过Replication双机热备份

来源:互联网 发布:创维电视机推荐 知乎 编辑:程序博客网 时间:2024/06/08 19:00

本文档根据自已的实施经验以及网上的一些资料进行整理


1.建立专门用于Replication的账户 


首先Replication操作会涉及到的两个重要权限,这里先做一下说明:
The REPLICATION CLIENT  privilege enables the use of SHOW MASTER STATUS and SHOW SLAVE STATUS. 
REPLICATION CLIENT:使得用户可以使用SHOW MASTER STATUS和SHOW SLAVE STATUS命令,也就是说这个权限是用于授予账户监视Replication状况的权力。
The REPLICATION SLAVE privilege should be granted to accounts that are used by slave servers to connect to the current server as their master. Without this privilege, the slave cannot request updates that have been made to databases on the master server. 
REPLICATION SLAVE:是一个必须而基本的权限,它直接授予slave服务器以该账户连接master后可以执行replicate操作的权利。


首先,在主服务器创建一个专门用于Replication的账户。这个账户必须具有REPLICATION SLAVE权限,除此之外没有必要添加不必要的权限,保证该用户的职责单一。
假定我们要建立的这个账户为repl,密码为repl,那么这一操作的命令如下:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.%' IDENTIFIED BY 'repl';
其中要特别说明一下192.168.0.%,这个配置是指明repl用户所在服务器,这里%是通配符,表示192.168.0.0-192.168.0.255的Server都可以以repl用户登陆主服务器。如果没有使用通配符,而访问的服务器又不在上述配制里,那么你将无法使用该账户从你的服务器replicate主服务器.


另外,其实可以同时赋予REPLICATION SLAVE和REPLICATION CLIENT权限,这样对Replication监视管理会很方便,不必区分slave,master,命令如下:
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'192.168.0.%' IDENTIFIED BY 'repl';


2.导出数据

将master上数据复制到slave上,以便主从数据库建立时两个数据库的数据保持一致,可使用命令或工具实现。
导出数据,先锁定,导出,再解锁:
mysql>FLUSH TABLES WHIH READ LOCK;
mysqldump -u root -p 数据库 > db.sql
mysql>UNLOCK TABLES;


在从机上:
mysql>user db;
mysql>source db.sql; (注意路径)


3.配置主从服务器


主从服务器的配置都是通过改写my.cnf/my.ini文件来完成的。
主机必须的配置项:
server_id=1 //为server起一个唯一的id,默认是1,推荐使用IP的最后一节。
log-bin=bin_log //日志文件前缀,如果不赋值将以#master-server-hostname为前缀


从机必须的配置项:
server_id=2 //为server起一个唯一的id,默认是1,推荐使用IP的最后一节.
注意:一般,我们也会为从机设定log-bin,这是因为默认的log-bin文件是根据主机名命名的,一旦机器更改主机名就会出问题,再者保持主从机的配制一致也方便做主从机切换!


主机可选的配置项:(用于配置主机哪些库会做二进制日志用以Replicate)
binlog-ignore-db=XXX,XXX //日志文件跳过的数据库
binlog-do-db=xxx,xxx //日志文件操作的数据库(默认所有数据库)


从机可选的配置项:(较多,用于配置从机会Replicate哪些库和表以及登陆信息等)
replicate-do-db, 
replicate-ignore-db
replicate-do-table, 
replicate-ignore-table
replicate-wild-do-table
replicate-wild-ignore-table


master-host=mysql1 //主服务器的主机名或IP
master-port=3306
master-user=repl
master-password=repl


master-retry-count=999 //连接重试次数
master-connect-retry=60 //连接失败后等待的秒数


注意:一条建议是不要在my.cnf/my.ini中配置master_host等选项,而应该使用CHANGE MASTER TO命令来动态设置,如果设置了master_host等选项,则不需再用CHANGE MASTER TO命令。
 
对于Master端,我只需简单地设置server_id和log_bin两项即可,对于Slave端其实只需要设置server_id,但是还有一些推荐的设置项。以下是《Hight Performance MySql》一书中给出的Slave端的推荐设置


# SLAVE-END replication-related configuration.
# The only required option for slave-end is server_id.
# The other options are recommanded on P 349 of《Hight Performance MySql》
server_id=234
log_bin=mysql_bin_log
relay_log = mysql_relay_bin_log
log_slave_updates = 1
read_only = 1
 


3.连接从服务器至主服务器进行Replicate
如果从服务器配置了master_host等连接选项,则不需使用这里的动态配置

通过在从服务器上输入CHANGE MASTER TO命令可以使从服务连接到某个主服务器上进行replication.
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.246',
-> MASTER_USER='repl',
-> MASTER_PASSWORD='repl',
-> MASTER_LOG_FILE='mysql-bin.000001',
-> MASTER_LOG_POS=0;


输入上述命令后即完成了全部配置工作,重启主从MYSQL,然后通过:
start slave;
启动从服务的replication工作,这样主从服务器就开始同步了。
你可以通过:
SHOW SLAVE STATUS;
命令来查看从服务器的状态。


可通过改变一些数据查看是否已同步

0 0
原创粉丝点击