项目背景描述:
在项目的开始只有一个MySQL实例在运行,后期因为安全性,压力,备份等原因需要在此实例的基础上面新增一个从库。
分析:
MySQL主从是基于binlog日志来实现的,那么需要主服务器开启binlog,此选项默认是关闭。我这边服务器在部署的时候就开启了,因为使用binlog可以用来恢复MySQL数据,并且还为以后做主从做好准备,所以我们推荐大家在部署主服务器的时候就开启此选项。另外在做主从的时候还需要主库和从库的server-id唯一,server-id在做主从的时候也是相当关键的一荐参数。
另外因为我们MySQL主库已经运行一段时间了,里面已经有相当多数据,我们需要将这些数据备份出来,然后从库再从备份的节点同步数据,这样来保持主从的数据一致性,并且在操作过程中最好不要影响我们的业务正常运行。最终决定使用xtrabackup来备份数据,因为用xtrabackup备份数据的时候不需要琐表,但只限于InnoDB引擎的数据库和XtraDB引擎的数据库,对于MyISAM引擎的数据库还是会琐表,刚好我们的数据库引擎使用的是InnoDB
操作步骤:
第一步:部署从数据库服务器,最好数据库版本一致,部署过程省略
第二步:修改配置文件
# 以下为主服务器需要修改的配置,server_id不一定为82,可以为任何一个数字,比如我们可以用本机的IP最后一位 log_bin = mysql-bin datadir=/data/mysql #此选项一定要指定,就算有默认也需要指定 server_id = 82 # 以下为可选项 binlog-ignore-db =mysql,test #指定忽略不同步的数据库 binlog-do-db=discuz,phpcms #指定要同步的数据库
在主服务器上面授权从服务器一个主从同步账号
mysql> grant replication slave on *.* to 'username'@'hostip' identified by 'password'
# 以下为从服务器需要修改的配置 datadir=/data/mysql #此选项一定要指定,就算有默认也需要指定 server_id = 2 # 以下为可选项 replicate-do-db #指定需要同步的数据库 replicate-ignore-db #指定不同步的数据库 replicate-do-table #指定需要同步的表 replicate-ignore-table #指定不同步的表 replicate-wild-do-table #指定需要同步的表,可以使用通配符,如test.tables1* replicate-wild-ignore-table #指定不需要同步的表,可以使用通配符
第三步:安装xtrabackup工具
新增yum源
cat >> /etc/yum.repos.d/xtrabackup.repo << EOF [percona] name = CentOS $releasever - Percona baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/ enabled = 1 gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona gpgcheck = 0 EOF
注意:执行完上面命令后注意对比下文件,有可能$releaserver $basearch需要手工添加
安装xtrabackup
yum -y install percona-xtrabackup
第四步:备份数据
注意:以需要使用root用户执行,或者使用sudo权限执行
备份整个库
xtrabackup --user=root --password=root --target-dir=/opt/backups --backup
--user 指定数据库访问用户名
--password 指定数据库访问密码,如果密码有特殊字符需要使用单引号引起来
--target-dir 指定备份路径,最好写绝对路径
--backup 与--target-dir选项一起使用
备份单个库
xtrabackup --user=root --password=root --databases=app_test --target-dir=/opt/backups --backup
--databases 指定需要备份的库名
备份多个库
xtrabackup --user=root --password=root --databases="app_test webservice" --target-dir=/opt/backups --backup
--databases 多库用双引号引起来,使用空格进行分隔
备份某个库的指定表
xtrabackup --user=root --password=root --databases="nirvana.user_info nirvana.card_info" --target-dir=/opt/backups --backup
--databases 备份表使用库名.表名的方式,如果是多个表就使用双引号引起来,不同表使用空格分隔
第五步:将备份数据复制到从服务器
scp -pr /opt/backups [email protected]:/path/to
第六步:将数据还原到从服务器
还原之前需要清空从服务器数据目录,如果有需要的数据就先备份到其实地方
整个库还原
还原单个库
还原多个库
还原某张表
执行以下命令
xtrabackup --copy-back --target-dir=/path/to
第七步:启用主从
执行以下命令
mysql> change master to master_host='192.168.1.71',master_port=3306,master_user='test',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=107;
master_host:
master_port:
master_user:
master_password:
master_log_file:
master_log_pos:
执行以下命令启用主从同步
mysql> start slave;
小知识:停止主从同步命令为
mysql> stop slave;
第七步:测试并检查主从状态
mysql> show slave status \G;
如果看以以下两个值为Yes说明主从同步正常
Slave_IO_Running: Yes Slave_SQL_Running: Yes
第八步:测试
可以修改下需要同步的库,或者表的数据看上是否能正常同步去,或者在备份完的时候就去修改下数据,这时候备份里同是没有此修改记录,当启用主从同步的时候看下数据是否会同步过来
原文地址:http://blog.51cto.com/270142877/2096818