实现mysql的主从备份
如想了解更多的主从配置点击跳转
1、安装mysql
安装步骤省略,详情可以查看点击跳转
我这里为两台centos安装MySQL5.7
- 一台后面做为master(主)192.168.25.5
- 一台做为从(slave )192.168.25.6
为减少不必要的麻烦,最好保证master的mysql的数据与slave的数据库一致
2、配置主(master)
亲先将防火墙关闭
systemctl disable firewalld.service
第一步:修改/etc/my.conf文件
该文件在window下为C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
在[mysqld]中添加:
binlog-ignore-db=mysql
log-bin=master_log
server-id=1
#这个参数一般用在主主同步中,用来错开自增值, 防止键值冲突
auto_increment_offset = 1
#这个参数一般用在主主同步中,用来错开自增值, 防止键值冲突
auto_increment_increment = 1
#将函数复制到slave
log_bin_trust_function_creators = 1
- server-id
master端的ID号;Master的server-id必须小于slave的server-id - log-bin
同步的日志路径及文件名,主从备份时必须要有,这个目录要是mysql有权限写入的,最后的日志文件名称就是你命名的再加上后期mysql会自动加上文件名后缀和文件类型(如master_bin.00001) - binlog-ignore-db:
不同步数据库(我这里是mysql)
第二步:重启mysql服务
systemctl restart mysql
第三步:建立帐户并授权slave
说明其它主机可以使用slave这个用户账号来登陆master主机的MySQL(如果在授权的用户不存在就会自动创建),一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%' IDENTIFIED BY '123456';
第四步:刷新权限
mysql> FLUSH PRIVILEGES;
第五步:查看mysql现在有哪些用户
mysql安装完成以后会有一个叫做mysql的数据库,其中有一张表叫做user,主要字段有user,host等等,记录的就是mysql的用户情况
mysql>select user,host from mysql.user;
第六步:查询master的状态
show master status;
show master status\G;
请记住红线
3、 配置从slave
第一步:修改/etc/my.conf文件
在[mysqld]中添加
server_id = 2
还有许多其它选项,请查看官方文档,我这就不再多说
第二步:修改uuid
主从模式要求mysql的物理名称不能一致,而我这里的两台的机器是因为是克隆的,所以一样,我需要修改,如果你不是,可省略该步骤
vim var/lib/mysql/auto.conf (或者删除/var/lib/mysql/auto.cnf文件)
给予server-uuid一个随意值即可(可以直接改变最后一位数值),再重新启动服务mysql
systemctl restart mysql
第三步:关闭slave功能,是关闭自己这台作为slave的功能(这个可以查看自己写文章,里面有具体说明 MySql两台机器互为主从)
因为MySQL5.5以后默认开启slave功能,所以这里先停止slave
mysql>stop slave;
第三步:在slave中执行同步命令
#执行同步命令,设置主服务器ip,同步账号密码,同步位置
mysql>change master to master_host='192.168.25.5',master_port=3306,master_user='slave',master_password='123456',master_log_file='master_log.000001';
注意语句中间不要断开,master_port为mysql服务器端口号(无引号),master_user为执行同步操作的数据库账户(前面在master上使用grant),这里的master_log.000001就是log-bin对应的值)。
第四步:开启同步功能
mysql>start slave;
4、测试MySQL的主从备份
测试就是在主库中进行DDL以及DML语句的执行,看从库是否会跟主库一样发生变化
master中
create database test;
use test;
CREATE TABLE `test` (
`id` int(255) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
insert into test(username,passwor) values('gxm','123456');
查看master与slave是否都有变化,如果数据一致,就配置成功
5、问题的解决
主从配置后,一旦主节点重启后,可能就无法同步数据,原因是因为 binlog日志不一致了,一旦无法同步 其中的 slave_sql_running,Slave_IO_Running,肯定有一个是有问题的,具体的可以看下这篇文章。
MySQL数据同步,出现Slave_SQL_Running:no和slave_io_running:no问题的解决方法
mysql replication 中slave机器上有两个关键的进程,死一个都不行,一个是slave_sql_running,一个是Slave_IO_Running,一个负责与主机的io通信,一个负责自己的slave mysql进程。