数据库主从
情景一:为启动一段时间的服务器创建并启动从节点

1、创建完全备份
可以使用mysqldump或xtrabackup。确保主服务器开启了二进制日志
mysqldump -A -F --single-transaction --master-data=1 >all.sql
# master-data=1为主从复制用,2会注释change master to 语句
2、从服务器配置
每个服务器都需要有唯一的server-id
[mysqld]
server-id=37 log-bin read-only
3、主服务器创建权限账户
需要一个有权限的账户来完成主数据读取和从的同步
因为做过备份,所以之后这个账号也会同步到从服务器,如果不想同步账号,可以和上一步位置互换
MariaDB [(none)]> grant replication slave on *.* to repluser@'10.0.0.%' identified by '123456';
4、使用备份文件完成数据复制和主从配置
使用前要先修改,可使用`help change master to`查看模板

修改结果
CHANGE MASTER TO MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=245 MASTER_HOST='10.0.0.27', MASTER_USER='repluser', MASTER_PASSWORD='123456', MASTER_PORT=3306;

5、将文件传到从服务器并使用
scp all.sql 10.0.0.37:/root/
#临时关闭二进制日志 MariaDB [(none)]> set sql_log_bin=0;
MariaDB [test]> source all.sql
MariaDB [test]> start slave;
#开启二进制日志
MariaDB [test]> set sql_log_bin=1;

情景二:主宕机,提升从为主
使用`show slave status \G`查看比较数据拷贝量,提升数据拷贝最多的为主,如果主服务器未完全崩溃,可以将二进制日志复制过来恢复
#查看之前位置 grep '\-\- CHANGE MASTER TO' all.sql #拷贝所有二进制日志 略 #组合二进制日志 mysqlbinlog /var/log/mysqlbin/mysql-bin.000002 --start-position=245 > /data/backup/inc.sql mysqlbinlog /var/log/mysqlbin/mysql-bin.000003 >> /data/backup/inc.sql . . . #恢复 MariaDB [(none)]> source /data/backup/inc.sql
此时数据较新,设置其为主节点
MariaDB [test]> stop slave ;
MariaDB [test]> reset slave all;
有其它服务器则按上面的步骤,先清除slave信息,再指向新的主
CHANGE MASTER TO MASTER_HOST='master2.mycompany.com', MASTER_USER='replication', MASTER_PASSWORD='bigs3cret', MASTER_PORT=3306, MASTER_LOG_FILE='master2-bin.001', MASTER_LOG_POS=4, MASTER_CONNECT_RETRY=10;

浙公网安备 33010602011771号