现在的位置: 首页 > 教程分享 > 正文

MySQL数据库主从同步配置

2016年12月09日 教程分享 ⁄ 共 3118字 ⁄ 字号 暂无评论

MySQL

MySQL主从服务器配置的优势有很多,如负载均衡、异地备份、高可用等,花郎对数据库的兴趣不是特别浓,只会一些基础的安装和配置,觉得异地备份这个功能对于我来说,还是很实用的,特此研究折腾了一番,分享一些心得给大家。

实验环境说明

花郎是使用VMware虚拟机做实验,一台是主机A(Wanghualang-A),IP地址为192.168.172.128,另一台是主机B(Wanghualang-B),IP地址为192.168.172.129;两台主机已安装LNMP,MySQL版本均为5.1.72。

第一步 安装LNMP环境

两台主机需要安装LNMP环境,可以参考花郎之前写的文章。

纯手工搭建LNMP环境

第二步 配置主服务器

登陆数据库,创建一个需要同步的数据库(Wanghualang),并为这个数据库创建一个管理用户(Hwoarang)和一个同步用户(Hwoarang_Slave),密码统一设置为Linux,且限制同步用户只能通过服务器IP的方式来访问,只给予备份权限(Replication Slave)。

  1. [root@wanghualang-A ~]# mysql -uroot -pwanghualang  
  2. mysql> create database Wanghualang;  
  3. mysql> use Wanghualang;  
  4. mysql> grant ALL on Wanghualang.* to Hwoarang@localhost identified by 'Linux';  
  5. mysql> grant replication slave on *.* to Hwoarang_Slave@'192.168.172.%' identified by 'Linux';  

配置MySQL主从,必须确保两个数据库的内容当前是一样的,先导出主数据库的数据,再把这个数据文件导入从数据库。

  1. [root@wanghualang-A ~]# mysqldump -uroot -pwanghualang Wanghualang > /tmp/backup.sql  

开始配置主MySQL数据库。

  1. [root@wanghualang-A ~]# vim /etc/my.cnf  

找到[mysqld]模块,添加以下内容:

  1. binlog-do-db=Wanghualang  
  2. binlog-ignore-db=mysql,test,information_schema  

说明一下,binlog-do-db表示Binlog日志需要指向哪一个数据库,binlog-ignore-db则代表不需要指向哪个数据库,这里要根据实际情况去设置,我们需要实现Wanghualang的数据库同步,所以就Binlog-do-db指向为Wanghualang,其余则不必指向,设置好如下图。

MySQL

设置完毕后,继续往下拉,把以下内容的注释符号去掉,设置好如下图。

  1. log-bin=mysql-bin  
  2. server-id=1  

MySQL

重启一次数据库。

  1. [root@wanghualang-A ~]# service mysqld restart  

登陆数据库,查看相关数据。

  1. [root@wanghualang-A ~]# mysql -uroot -pwanghualang  

查看当前数据的server_id和主数据库状态信息,如下图。

  1. mysql> show variables like 'server_id';   
  2. mysql> show master status;  

MySQL

备份当前数据库,并把备份文件远程传送给主机B。嘛,主数据库的折腾暂时告一段落!

  1. [root@wanghualang-A ~]# mysqldump -uroot -pwanghualang Wanghualang > /tmp/backup.sql  
  2. [root@wanghualang-A ~]# scp /tmp/backup.sql root@wanghualang-B:/tmp/  

第三步 配置从数据库

创建数据库,导入刚才从主机A传送过来的备份文件。

  1. [root@wanghualang-B ~]# mysql -uroot -pwanghualang  
  2. mysql> create database Wanghualang;  
  3. mysql> use Wanghualang;  
  4. mysql> source /tmp/backup.sql  
  5. mysql> quit  

在第二步的操作中,主数据库已经创建了一个用于同步的特殊用户(Hwoarang_Slave),现在我们用这个特殊用户来测试一下,看能否在主机B远程到主机A的数据库去?如果远程登陆失败,建议检查一下主机A上的防火墙、SElinux。

  1. [root@wanghualang-B ~]# mysql -uHwoarang_Slave -h 192.168.172.128 -pLinux  
  2. mysql> quit  

开始配置从MySQL数据库。

  1. [root@wanghualang-B ~]# vim /etc/my.cnf  

找到[mysqld]模块,添加以下内容:

  1. replicate-do-db=Wanghualang  
  2. replicate-ignore-db=mysql,test,information_schema  
  3. read_only  

说明一下,replicate-do-db表示需要同步哪一个数据库,replicate-ignore-db则代表不需同步哪个数据库,这里要根据实际情况去设置,我们需要实现Wanghualang的数据库同步,所以就replicate-do-db设置为Wanghualang,其余则不必同步,设置好如下图。

MySQL

设置完毕后,继续往下拉,把以下内容的注释符号去掉,再改一下数字,设置好如下图。

  1. log-bin=mysql-bin  
  2. server-id=2  

MySQL

重启一次数据库。

  1. [root@wanghualang-B ~]# service mysqld restart  

登陆数据库,检查server_id,停止同步进程,修改同步信息,最后开启同步进程,设置好后如下图!

  1. mysql> slave stop;  
  2. mysql> change master to master_host='192.168.172.128',master_user='Hwoarang_Slave',master_password='Linux',master_log_file='mysql-bin.000001',master_log_pos=106;  
  3. mysql> slave start;  

MySQL

验证同步状态,折腾从数据库暂时告一段落!

  1. mysql> show slave status\G  

MySQL

第四步 验证主从同步

在主数据库上创建一个Login表,如下图。

  1. [root@wanghualang-A ~]# mysql -uroot -pwanghualang  
  2. mysql> use Wanghualang;  
  3. mysql> create table Login(User varchar(20),Password varchar(20));  
  4. mysql> show tables;  
  5. mysql> quit;  

MySQL

再到从数据库上看看是否存在这个表?

  1. [root@wanghualang-B ~]# mysql -uroot -pwanghualang  
  2. mysql> use Wanghualang;  
  3. mysql> show tables;  

MySQL

给我留言

留言无头像?

×