关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

MySQL 主从服务器数据库同步的实现

发布时间:2021-03-10 16:43:42

数据库管理员进行数据库定期备份是预防和尽可能降低数据损失的有效方法。在数据库管理过程中,如何确保数据库存储数据的安全性是人们最为关注也最为担忧的问题。


 数据库安全的主要威胁


就目前来看,对数据安全的威胁因素主要有以下几个方面:


(1)人为因素:用户或管理员误删除某些数据或整个数据表、使用弱口令和数据库错误的配置。


(2)数据库系统漏洞:缓冲区溢出等数据库软件漏洞或SQL注入漏洞等应用程序逻辑漏洞。


(3)第三方恶意插件:如病毒和一些木马程序所引起的插件。


(4)硬件因素:保存数据库的磁盘介质或磁盘控制器出现了故障。


(5)环境因素:断电或不正常关闭了MySQL服务器等。



 数据库同步的方案


如果使用纯手动的方式来备份数据,不但繁琐,而且容易出现错误。因此需要一种自动方式来对数据库操作进行自动备份还原。对主从服务器数据库进行同步复制,可以在MySQL数据库实现Cluster。MySQLCluster是由MySQL官方提供的集群部署方案,主要提供以下几种方案:


(1)高可用性:主服务器故障后可以实现自动切换到后备服务器,尽管部分硬件和软件不可预知地会发生故障,但整个系统的服务必须保证每天24小时每星期7天可用,从而保证数据不丢失和系统不停机。


(2)可伸缩性:可方便通过脚本增加DB服务器,当数据库服务的负载增长时,系统能被扩展来满足需求,且不降低服务质量。


(3)负载均衡:支持手动将公司的数据请求自由切换或指定配置到其它服务器,相互之间可以负载均衡,显著提升数据库的性能,提高设备利用率。MySQLCluster支持通过自动分片支持读写扩展,通过实时备份冗余数据来实现可用性最高的方案的有力保证。通过数据库实现Cluster,不但提高了MySQL的安全性,而且还减轻了DBA大量的工作。



 MySQL同步实现步骤


为了实现主从服务器数据库的复制或是同步功能,必须由从服务器读取主服务器上的二进制日志(binarylog)来更新自己的数据库。而要实现这一步,则应该将主服务器记录数据库的所有变化到一个二进制日志中。这些记录称之为二进制日志事件(binarylogevents)。假设环境如下:


2台机器linuxcentOS;ip:192.168.1.1;ip:192.168.1.2;分别安装了mysql5.1;将mysql默认配置文件(
/usr/share/doc/MySQL-server-community-version下my-medium.cnf)拷贝至/etc目录下,命名为my.cnf。


先以192.168.1.1为主数据库,192.168.1.2为从数据库。将主数据库的数据库打包拷贝到从数据库,同步主从数据库的数据。


(1)
tar-cvf/data/db.tar/var/lib/mysql/db备份主数据库数据。


(2)scp/data/db.tarroot@192.168.1.2:/root发送至从数据库。


(3)
cp/root/db.tar/var/lib/mysql/db.tar拷贝至从数据库。


(4)tar-xvfdb.tar解压。


然后为master192.168.1.1的my.cnf增加如下,配置:


binlog-do-db=db需要同步的数据库名;logbin=/path/logname生成的log位置;


binlog-ignoredb=mysql忽略的数据库名。


接着在mysql中增加用于读取数据文件的专用用户语句如下:


GRANTREPLICATIONSLAVEONdb.*TO'rep'@'192.168.1.2'IDENTIFIEDBY'password';


flushprivileges刷新权限


servicemysqlrestart重启主服务器


mysql下面来配置从服务器。修改从服务器my.cnf文件增加如下配置:


server-id=2这里注意不要和主服务器相同


master-host=192.168.1.1主服务器IP


master-user=rep前面配置数据库用户


master-password=password用户密码


master-port=3306同步端口


master-connect-retry=0重连时间


replicate-do-db=db需要同步的数据库


replicate-igonre-db=mysql需要忽略的数据库


配置完成后登录mysql


启动从数据库读取进程slavestart


然后查看slave状态show_slave_status\G


注意显示结果中Slave_IO_Running,Slave_SQL_Running


如果都为yes则表示启动成功,如果为no


则在主服务器(192.168.1.1)中输入命令:showmasterstatus;


得到结果:File|Position|Binlog_Do_DB|Binlog_Ignore_DB|


+------------------+----------+-------------------+------------------+


|log.000031|75|db|mysql|注意查看其中file和position是否和showslavestatus中的master_log_file和master_log_pos匹配。如果不一致则在从数据库(192.168.1.2)中执行


以下语句,以设定读取的日志和位置


1.slavestop;


2.changemastertomaster_log_file='log.000031',master_log_pos=75;


3.slavestart;


执行完毕后,再次查看


showslavestatus;


Slave_IO_Running=yes,Slave_SQL_Running=yes


则表示启动成功。


测试一下,然后在主数据库服务器插入一条数据,如果从数据库也增加了,则证明配置成功。


分析目前Internet上后台应用数据库的使用情况,可以发现MySQL的Free特点及其在Unix平台上和Apache、PHP结合的优异性能表现,将会成为个人网站和中小型商业网站首选项。其占有的市场份额也不断趋于上升,并且考虑将高可用性即HA(HighApplicability)作为他们的优选解决方案,而成为人们可以利用MySQLreplication功能提供一种高性价比的HA解决办法。



/../template/Home/Databay/PC/Static