配置mysql主从 数据库怎么同步过来
发布时间:2025-05-12 16:07:15 发布人:远客网络
一、配置mysql主从 数据库怎么同步过来
MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步、主从模式、互相备份模式的功能。本文档主要阐述了如何在linux系统中利用mysql的replication进行双机热备的配置。
操作系统:Linux 2.6.23.1-42.fc8# SMP(不安装XEN)
设备环境:PC(或者虚拟机)两台
数据库同步复制功能的设置都在MySQL的配置文件中体现,MySQL的配置文件(一般是my.cnf):在本环境下为/etc/my.cnf。
在IP设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status查看防火墙状态。如果防火墙状态为仍在运行。使用service iptables stop来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。
最终以两台主机可以相互ping通为佳。
3.2配置A主(master) B从(slave)模式
、增加一个用户同步使用的帐号:
GRANT FILE ON*.* TO‘backup’@'10.10.8.112' IDENTIFIED BY‘1234’;
GRANTREPLICATION SLAVE ON*.* TO‘backup’@'10.10.8.112' IDENTIFIED BY‘1234’;
赋予10.10.8.112也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。
、增加一个数据库作为同步数据库:
create table mytest(username varchar(20),password varchar(20));
修改A的/etc/my.cnf文件,在my.cnf配置项中加入下面配置:
binlog-do-db=test#指定需要日志的数据库
show variable like‘server_id’;
mysql> show variables like'server_id';
、用show master status/G命令看日志情况。
mysql> show master status/G
*************************** 1. row***************************
、增加一个数据库作为同步数据库:
create table mytest(username varchar(20),password varchar(20));
修改B的/etc/my.cnf文件,在my.cnf配置项中加入下面配置:
master-user=backup#同步用户帐号
master-connect-retry=60#预设重试间隔秒
replicate-do-db=test#告诉slave只做backup数据库的更新
show variables like‘server_id’;
mysql> show variables like'server_id';
、用show slave status/G命令看日志情况。
*************************** 1. row***************************
Slave_IO_State: Waiting for master to send event
Master_Log_File: mysqld-bin.000001
Relay_Log_File: mysqld-relay-bin.000003
Relay_Master_Log_File: mysqld-bin.000001
分别使用insert, delete, update在A主机进行增删改查数据库;查看B主机的数据库是否与A主机一致;若一致,则配置成功。
如果在A主机加入slave设置,在B主机加入master设置,则可以做B->A的同步。
、在A主机的配置文件中 mysqld配置项加入以下设置:
、在B的配置文件中 mysqld配置项加入以下设置:
注意:当有错误产生时,*.err日志文件同步的线程退出,当纠正错误后,要让同步机制进行工作,运行slave start。
重起A、B机器,则可以实现双向的热备份。
、Slave机器的权限问题,不但要给slave机器File权限,还要给它REPLICATION SLAVE的权限。
、在修改完Slave机器/etc/my.cnf之后,slave机器的mysql服务启动之前,记得要删除掉master.info
、在show master status或着show slave status不正常时,看看.err是怎样说的。
、Slave上Mysql的Replication工作有两个线程, I/O thread和SQL thread。I/O的作用是从master 3306端口上把它的binlog取过来(master在被修改了任何内容之后,就会把修改了什么写到自己的binlog等待slave更新),然后写到本地的relay-log,而SQL thread则是去读本地的relay-log,再把它转换成本Mysql所能理解的语句,于是同步就这样一步一步的完成.决定I/O thread的是/var/lib/mysql/master.info,而决定SQL thread的是/var/lib/mysql/relay-log.info.
、启动slave,命令用start slave;重新启动用restart slave
二、MySQL配置主从同步、主主同步、多主多从
MySQL的主从同步、主主同步与多主多从配置详解
在MySQL中,数据复制主要分为三种模式:主从同步、主主同步以及多主多从。让我们逐个了解它们的配置方法。
首先,配置主数据库(master)需要设置root账号和密码(如Master123456),并配置相应的同步参数,如查看master_log_file和master_log_pos,通过SHOW MASTER STATUS获取。
接着,配置从数据库(slave)时,将master_log_file和master_log_pos信息导入,确认Slave_IO_Running和Slave_SQL_Running都为yes,代表配置成功。
这种模式下,需要将一个从库升级为主库,原主库变成从库。当在两个主库上同时增加数据时,可能产生相同的主键,需要额外处理以避免冲突。
采用主主同步和主从同步的组合,当master3307和master3308更新时,四个数据库都需要同步。这时,需要分别设置master3307到slave3312的同步,并进行额外的配置管理。
当遇到同步出错时,可以通过命令行工具或者像Navicat这样的图形界面工具,使用“数据传输”功能来解决数据一致性问题。
三、mysql 主从如何设置同步
同步介绍 mysql的主从同步是一个异步的复制过程,从一个 Master复制到另一个 Slave上。在 Master与 Slave之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave端,另外一个线程(IO线程)在 Master端。要实现 MySQL的主从同步,首先必须打开 Master端的BinaryLog(mysql-bin)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。打开 MySQL的 Binary Log可以通过在启动 MySQL Server的过程中使用“—log-bin”参数选项,或者在 my.cnf配置文件中的 mysqld参数组([mysqld]标识后的参数部分)增加“log-bin”参数项。
Mysql主从服务器配置主服务器IP:192.168.1.60从服务IP:192.168.1.61 Linux:centOS Mysql版本:5.1.58以下配置皆在此服务上进行配置
查看主库服务器的my.cnf配置文件,根据mysql安装包、版本不同,相关的路径和配置文件路径会大致不一样,不过大多情况下是一样的。该文件在 etc/目录下。Mysql服务也提供了对不同服务器配置使用不同的配置文件,要使用它们的时候,只需用它们任一一个替换上面的my.cnf文件即可。注:替换文件名必须为my.cnf。 cnf配置文件一般会有四个,可以根据命令# ll/usr/share/mysql/*.cnf查看; my-small.cnf内存少于或等于64M,只提供很少的的数据库服务; my-medium.cnf内存在32M--64M之间而且和其他服务一起使用,例如web; my-large.cnf内存有512M主要提供数据库服务; my-huge.cnf内存有1G到2G,主要提供数据库服务; my-innodb-heavy-4G.cnf内存有4G,主要提供较大负载数据库服务(一般服务器都使用这个);可以根据服务器配置的不同选择不同的cnf配置文件。
配置my.cnf文件采用系统默认的etc/my.cnf配置文件进行配置,对主服务器进行配置主要需要在配置文件中添加以下几项(在添加的时候要确保它们不在文件中存在,因为如选择上面几种不同的配置文件,配置里的内容会不一样,如果没有相应的项,需要添加)。用vi etc/my.cnf打开文件,对文件进行修改,在[mysqld]下面进行添加修改: Server-id= 1#这是数据库ID,此ID是唯一的,主库默认为1,其他从库以此ID进行递增,ID值不能重复,否则会同步出错; log-bin= mysql-bin二进制日志文件,此项为必填项,否则不能同步数据; binlog-do-db= testcreate#需要同步的数据库,如果需要同步多个数据库;则继续添加此项。 binlog-do-db= testcreate1 binlog-do-db= testcreate2 binlog-ignore-db= mysql不需要同步的数据库;至此主服务器配置my.cnf配置完成,保存退出文件。现在对Mysql服务器进行重启:#servicemysqld restart如果重启失败,则证明配置文件错误,需重新检查。建议:对my.cnf修改之前最好对其进行备份,以免配置文件修改失败不能及时重启服务器。
配置完成后需要建立同步用的数据库账户主库需要提供一个账户让从库对起连接并同步,用命令mysql服务器 mysqlgrantreplication slave on*.* to‘testcreate’@’192.168.1.61’ identified by‘123456’;说明:’testcreate’:同步的数据库;‘192.168.1.61’:同步的数据库地址;‘123456’:同步的数据库密码,在从库配置时需要设置。
显示主库信息 mysqlshowmaster status;执行上述命令显示:看到上述信息则表示主库建立成功。
备份数据库(如果从服务器也为新建库,则不需要此操作)备份数据库的方法有很多种:如果在同一局域网可以直接复制数据库,也可以用工具直接进行数据导入。复制数据库用打包的方法:# cd/data转到存放Mysql数据库的路径下# tarcvfz testcreate.tar.gz db/再从数据库中进行复制解压# cd/data# scp192.168.1.61:/data/testcreate.tar.gz#tarxvfz testcreate.tar.gz数据复制完毕;
从库配置从服务器的配置基本与主库配置差不多,选择的从库服务器为:192.168.1.61 1.配置从库服务my.cnf文件# vietc/my.cnf对其进行如下修改: Server-id= 2#这里ID改为2因为主库为1; log-bin= mysql-bin必填项,用于数据同步; master-host= 192.168.1.60主库IP; master-user= test同步用的账户; master-password= 123456同步账户密码,主库时的设置; master-port= 3306同步数据库的端口号。
重启从库服务器#service mysqld restart如果重启失败则配置文件有问题,需重新检查配置。
调整复制过来的数据库的权限(如果有从主库复制过来的数据库)主库复制过来的数据库权限都为root权限,需要修改为mysql权限#chown–R mysql:mysql/var/lib/mysql如果从库是新建的库就不需要进行此步骤
显示从服务器状态进行mysql服务器: mysqlshowslave status\G;显示如图:
如果slave_io_running和slave_sql_running都为yes则表示从服务器配置成功。如果遇到关于position相关的错误,就需要再手动设置以下File/Postion的信息 mysqlChangemaster to master_host=‘192.168.1.60’ master_user=‘test’ master_password=’123456’ master_log_file=’mysql-bin.000001’,主库的文件信息 master_log_pos=’106’;主库的Position信息