mysql 数据库双机热备份

打印 上一主题 下一主题

主题 1854|帖子 1854|积分 5562

mysql 数据库双机热备份

1. 环境准备


  • 两台纯净的centos6 linux系统
  • 两台linux虚拟机都安装mysql数据库
  • 前提条件,两台机器可以ping通
名词表明


  • 主服务器(master):负责日常服务器的增、删、改、查任务,是数据库集群的主力者。
  • 从服务器(slave):负责服务器上热备份数据,若主服务器崩溃或人为不可抗拒的灾难,可暂时替代主服务器继续提供数据。
  • 热备份(hot backup):指系统运行时举行的备份操纵,在备份过程中,系统不会制止服务,数据被实时或准实时地复制到备份存储中。
  • 冷备份(cold backup):指系统关闭或不运行时举行的备份操纵,在备份过程中,系统服务被制止,数据被复制到备份存储中。成本较低。
2. 主从复制

环境形貌
  1. 主服务器master:192.168.111.136
  2. 从服务器slave:192.168.111.137
  3. MySQL 用户:replicate
  4. MySQL 用户密码:root
复制代码
两台机器同时操纵,可以使用 MobaXterm_CHS 毗连虚拟机,便于操纵


关闭防火墙
  1. service iptables stop
复制代码
安装mysql
  1. # 解压mysql安装包,主从服务器mysql版本保持一致
  2. cd /home
  3. tar -xvf MySQL.rpm-bundle.tar
  4. # 安装数据库
  5. rpm -ivh MySQL-*rpm --nodeps --force
复制代码
启动mysql,登录mysql
  1. service mysql start
  2. # 首次登录不需要密码,直接enter
  3. mysql -uroot -p
复制代码
  1. # 授权root并修改密码为root
  2. grant  all privileges on  *.* to 'root'@'localhost' identified by 'root';
  3. # 仅修改密码:alter user 'root'@'localhost' indentified by 'root';
  4. flush privileges;
复制代码
改成对应的静态ip
  1. cd /etc/sysconfig/network-scripts/
  2. cat ifcfg-eth0
  3. # 如下内容
  4. DEVICE=eth0
  5. HWADDR=00:0C:29:6D:7A:FD
  6. TYPE=Ethernet
  7. UUID=859d5289-7bf4-423f-aad4-dd2f4a0becbb
  8. ONBOOT=no
  9. NM_CONTROLLED=yes
  10. BOOTPROTO=dhcp
  11. vi ifcfg-eth0
  12. # 改成
  13. DEVICE=eth0
  14. HWADDR=00:0C:29:6D:7A:FD
  15. TYPE=Ethernet
  16. UUID=859d5289-7bf4-423f-aad4-dd2f4a0becbb
  17. ONBOOT=yes
  18. NM_CONTROLLED=yes
  19. BOOTPROTO=static
  20. IPADDR=192.168.111.137
  21. NETMASK=255.255.255.0
  22. GATEWAY=192.168.111.1
  23. DNS1=8.8.8.8
  24. DNS2=8.8.4.4
  25. # 重启网络
  26. sudo systemctl restart network
复制代码
主服务器master配置

进入192.168.111.136,进入mysql,创建同步用户replicate,授权复制(replication)附属(slave)权限,并指定从服务器ip以及暗码为root
  1. # 主服务器创建用户
  2. grant replication slave on *.* to  'replicate'@'192.168.111.137' identified by  'root';
  3. flush privileges;
复制代码
  1. # 在从服务器192.168.111.137 上测试
  2. mysql -h192.168.111.136 -ureplicate -proot;
复制代码
修改主服务器 mysql 配置文件
  1. vi /etc/my.cnf
  2. # 添加如下内容
  3. [mysqld]
  4. server-id=1
  5. log-bin=mysql-bin
  6. binlog-do-db=test
  7. binlog-ignore-db=mysql
复制代码
重启mysql服务
  1. service mysql restart
复制代码
检察主服务器状态
  1. # 进入mysql服务
  2. mysql -uroot -proot
  3. # 刷新表的读取锁
  4. flush tables with read lock;
  5. # 查看主服务器的状态
  6. show master status\G;
  7. # 解锁表
  8. unlock tables;
复制代码
注意记载:File(日志编号)和 Position(位置)两个参数,用于从服务器配置主从关系时用到。
从服务器slave配置

进入192.168.111.137,修改从服务器 mysql 配置文件
  1. vi /etc/my.cnf
  2. # 添加如下内容
  3. [mysqld]
  4. server-id=2
  5. log-bin=mysql-bin
  6. replicate-do-db=test
  7. replicate-ignore-db = mysql,information_schema,performance_schema
复制代码
重启mysql服务
  1. service mysql restart
复制代码
进入mysql,用change master指定同步位置
  1. # 先停止slave服务线程
  2. stop slave;
  3. # 指定同步位置
  4. change master to master_host='192.168.111.136',
  5. master_user='replicate',
  6. master_password='root',
  7. master_log_file='mysql-bin.000001',
  8. master_log_pos=107;
  9. # master_host 主服务ip
  10. # master_user 同步用户
  11. # master_log_file File日志编号
  12. # master_log_pos Position位置
  13. # 刷新权限
  14. flush privileges;
复制代码
检察从服务器状态
  1. show slave status\G;
  2. # Slave_IO_Running: Yes
  3. # Slave_SQL_Running: Yes
  4. # 表示设置成功
复制代码
sql语言不区分大小写。
测试同步

在主服务器中,进入mysql,创建表,插入数据
  1. use test;
  2. create table tb_mobile(mobile varchar(20), time timestamp default now())
  3. insert into tb_mobile (mobile) values('13456789898');
复制代码
在从服务器中,进入mysql,检察是否同步成功
  1. use test;
  2. select * from tb_mobile;
复制代码
现在从服务器可以同步主服务器,但是主服务器无法同步从服务器的操纵,接下来,举行主主复制配置。
即主从为单向复制,主主为双向复制。
3. 主主复制

环境形貌:和主从复制时划一,可以完成主从复制后,举行主主复制,二者不影响,不外以防万一,可以先打个快照。
  1. 服务器 A:192.168.111.136
  2. 服务器 B:192.168.111.137
  3. MySQL 用户:replicate
  4. MySQL 用户密码:root
复制代码
服务器 A 配置(192.168.111.136)

编辑 MySQL 配置文件
  1. vi /etc/my.cnf
  2. # 如下配置
  3. [mysqld]
  4. server-id=1
  5. log-bin=mysql-bin
  6. binlog-do-db=test
  7. binlog-ignore-db=mysql,information_schema,performance_schema
  8. # 添加以下配置以启用复制过滤器
  9. replicate-do-db=test
  10. replicate-ignore-db=mysql,information_schema,performance_schema
复制代码
创建复制用户:
  1. create user 'replicate'@'%' identified by 'root';
  2. grant replication slave on *.* to 'replicate'@'%';
  3. flush privileges;
  4. # %代表任何主机
复制代码
记载二进制日志文件名和位置:
  1. show master status;
复制代码
服务器 B 配置(192.168.111.137)

编辑 MySQL 配置文件:
  1. vi /etc/my.cnf
  2. # 如下配置
  3. [mysqld]
  4. server-id=2
  5. log-bin=mysql-bin
  6. binlog-do-db=test
  7. binlog-ignore-db=mysql,information_schema,performance_schema
  8. # 添加以下配置以启用复制过滤器
  9. replicate-do-db=test
  10. replicate-ignore-db=mysql,information_schema,performance_schema
复制代码
创建复制用户:
  1. create user 'replicate'@'%' identified by 'root';
  2. grant replication slave on *.* to 'replicate'@'%';
  3. flush privileges;
复制代码
记载二进制日志文件名和位置:
  1. show master status;
复制代码
配置双向复制

在服务器 A(192.168.111.136)上设置从服务器(指向服务器 B)
从服务器 B 获取二进制日志文件名和位置,然后在服务器 A 上执行以下命令:
  1. change master to
  2. master_host='192.168.111.137',
  3. master_user='replicate',
  4. master_password='root',
  5. master_log_file='mysql-bin.000001',  -- 使用服务器 b 上实际的日志文件名
  6. master_log_pos=107;  -- 使用服务器 b 上实际的日志位置
  7. start slave;
复制代码
在服务器 B(192.168.111.137)上设置从服务器(指向服务器 A)
从服务器 A 获取二进制日志文件名和位置,然后在服务器 B 上执行以下命令:
  1. change master to
  2. master_host='192.168.111.136',
  3. master_user='replicate',
  4. master_password='root',
  5. master_log_file='mysql-bin.000001',  -- 使用服务器 a 上实际的日志文件名
  6. master_log_pos=107;  -- 使用服务器 a 上实际的日志位置
  7. start slave;
复制代码
验证复制状态

在服务器 A 和 B 上验证复制状态
  1. show slave status\G;
复制代码
检查 Slave_IO_Running 和 Slave_SQL_Running 是否均为 Yes,以及是否存在任何错误。
分别在服务器A和服务器B中,插入输入,检察数据库是否同步
  1. use test;
  2. insert into tb_mobile (mobile) values('13456789898');
  3. select * from tb_mobile;
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表