【MySQL】使用xtrabackup创建mysql从库
2022-06-18 14:39 abce 阅读(252) 评论(0) 编辑 收藏 举报1.master端备份
xtrabackup --defaults-file=${mysql_cnf} --backup --user=${mysql_user} --password=${mysql_password} --target-dir=/path/to/backupdir
2.prepare已经备份的数据
xtrabackup --user=${mysql_user} --password=${mysql_password} --prepare --target-dir=/path/to/backupdir
这样可以获得一个一致性的快照。事务日志被应用后,会创建一个新的日志。至此,数据文件就可以被mysql server使用了。
3.将数据拷贝到slave节点
使用rsync或者scp 如果使用rsync将数据数据同步到slave的数据目录,建议将slave的mysqd关闭
rsync -avpP -e ssh /path/to/backupdir TheSlave:/path/to/mysql/
4.将master的快照文件移动到指定的目录
xtrabackup --move-back --target-dir=/path/to/mysql/backupdir
修改属主
chown mysql:mysql /path/to/mysql/datadir
5.master创建复制用户
grant replication slave on *.* to 'repl'@'$slaveip' identified by '$slavepass';
6.配置slave
拷贝master的配置文件
scp user@TheMaster:/etc/mysql/my.cnf /etc/mysql/my.cnf
编辑配置文件
vi /etc/mysql/my.cnf
server-id=2
启动msql实例
7.启动复制
查看xtrabackup_info文件找到gtid
reset master;
reset slave;
SET GLOBAL gtid_purged="515727a3-9379-11ec-9fb5-005056829fe8:1-63644";
change master to master_host='$masterip', master_user='repl', master_password='$slavepass',master_port=3306,master_auto_position=1,master_connect_retry=10;
start slave;
show slave status\g
增加更多的slave
使用已经存在的slave,再创建一个slave。
1.备份slave
xtrabackup --backup --user=${mysql_user} --password=${mysql_password} --slave-info --target-dir=/path/to/backupdir
参数--slave-info,会额外创建一个文件,叫做:xtrabackup_slave_info
2.应用日志
xtrabackup --prepare --use-memory=2G --target-dir=/path/to/backupdir/
3.拷贝到新的从节点
rsync -avprP -e ssh /path/to/backupdir TheNewSlave:/path/to/mysql/datadir
4.主库创建复制用户
grant replication slave on *.* to 'repl'@'$newslaveip' identified by '$slavepass';
5.拷贝配置文件
scp user@TheSlave:/etc/mysql/my.cnf /etc/mysql/my.cnf
6.修改配置文件
vi /etc/mysql/my.cnf
skip-slave-start
server-id=3
启动msql实例
7.启动复制
change master to master_host='$masterip', master_user='repl', master_password='$slavepass', master_port=3306,master_auto_position=1,master_connect_retry=10;
start slave;
注意点:
1.innodb-log-file-size在出从两边设置要一样
2.查看是否有memory引擎的表
select concat('ALTER TABLE `',table_schema,'`.`',table_name,'` ENGINE=INNODB;')
from information_schema.tables
where engine='memory' and table_schema not in ('information_schema','performance_schema');