明人不说暗话,直接进入正题
一、准备工作
假设两个服务器IP如下:
主服务器:44.92.163.112 -Linux
从服务器:114.74.22.11 -Linux
注意:
1、主从数据库版本最好一致;
2、主从数据库内数据保持一致;
3、主从服务器要保证同步服务期间的网络联通,即ip可以相互ping通。
二、安装percona-xtrabackup
xtrabackup是一款数据备份工具
推荐rpm安装:https://www.percona.com/downloads/XtraBackup/LATEST/
我这里选择2.2.12版本的,Linux下64位。
下载好后,通过xftp将安装包分别放入主服务器和从服务器目录下进行安装。
输入命令:
[root@iz java]# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL perl-Digest-MD5
[root@iz java]# yum -y install rsync perl
[root@iz java]# rpm -Uvh percona-xtrabackup-2.2.12-1.el7.x86_64.rpm
三、备份和恢复
主服务器配置:
1、备份
先在/tmp目录下创建一个文件夹,这里命名为backup
[root@iz java]# innobackupex --socket=/tmp/mysql.sock --user=root --password=kapphk --defaults-file=/etc/my.cnf --parallel=4 --database=passport /tmp/backup
2、保持事务一致性
#2018-09-10_11-53-17:上一条命令执行后生成的文件夹名称
[root@iz java]# innobackupex --socket=/tmp/mysql.sock --user=root --password=kapphk --defaults-file=/etc/my.cnf --database=passport --apply-log /tmp/backup/2018-09-10_11-53-17
3、传输
#在主服务器使用scp命令远程复制数据到从服务器,预先在从服务器/tmp目录下也创建一个backup文件夹
[root@iz ~]# scp -r /tmp/backup/2018-09-10_11-53-17 root@114.74.22.11:/tmp/backup
从服务器配置:
1、恢复
#注:恢复的时候data目录不能有任何数据,所以恢复前先备份原数据库数据:
[root@iZ94byqpectZ ~]# mv /usr/local/mysql/data /tmp/data_bak
2、把主的数据导入到从
[root@iZ94byqpectZ ~]# innobackupex --socket=/tmp/mysql.sock --user=root --password=kapphk --defaults-file=/etc/my.cnf --copy-back /tmp/backup/2018-09-10_11-53-17/
3、还原从数据库原有数据
(在/usr/local/mysql目录下新创建一个data文件夹,将data_bak下的数据库目录复制到data下即可,如:)
[root@iZ94byqpectZ ~]# cp -r /tmp/data_bak/mysql /usr/local/mysql/data
4、还原从数据库权限
[root@iZ94byqpectZ mysql]# chown -R mysql .
[root@iZ94byqpectZ mysql]# service mysqld start
[root@iZ94byqpectZ mysql]# ./scripts/mysql_install_db --user=mysql --datadir=/usr/local/mysql/data
5、保持从库和主库的server_id不一致
#编辑my.cnf文件,添加以下两行配置
[root@iZ94byqpectZ mysql]# vim /etc/my.cnf#主从库的server_id值不能冲突,打开/etc/my.cnf文件,将server_id的值修改成2(如果主库的server_id=1的话)
server_id = 2
#在主从的/etc/my.cnf文件中都要加上这个属性值:sync_binlog = 1
sync_binlog = 1
6、重启数据库服务
[root@iZ94byqpectZ mysql]# service mysqld restart
四、同步配置
主服务器配置:
主库授权于同步帐号
mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_passport'@'114.74.22.11' IDENTIFIED BY 'slave_passport';
mysql> FLUSH PRIVILEGES;
从服务器配置:
1、从库开启同步
[root@iz ~]# cat /tmp/backup/2018-09-10_11-53-17/xtrabackup_binlog_info
mysql-bin.000007 302322mysql> CHANGE MASTER TO-> MASTER_HOST='44.92.163.112',-> MASTER_USER='slave_passport',-> MASTER_PASSWORD='slave_passport',-> MASTER_PORT=3306,-> MASTER_LOG_FILE='mysql-bin.000007',-> MASTER_LOG_POS=302322;
2、开启主从同步
mysql> start slave;#查看从库状态
mysql> show slave status\G;
显示如下,则开启成功!
#查看当前对应的 MySQL 帐户的运行线程
mysql> show processlist;
到此,配置完成!