mysql主从同步是一直进行的吗
有两种方法,一种方法使用mysql的checktable和repairtable的sql语句,另一种方法是使用MySQL提供的多个myisamchk,isamchk数据检测恢复工具。前者使用起来比较简便。推荐使用。
1.checktable和repairtable
登陆mysql终端:
mysql-uxxxxx-pdbname
checktabletabTest;
如果出现的结果说Status是OK,则不用修复,如果有Error,可以用:
repairtabletabTest;
进行修复,修复之后可以在用checktable命令来进行检查。在新版本的phpMyAdmin里面也可以使用check/repair的功能。
2.myisamchk,isamchk
其中myisamchk适用于MYISAM类型的数据表,而isamchk适用于ISAM类型的数据表。这两条命令的主要参数相同,一般新的系统都使用MYISAM作为缺省的数据表类型,这里以myisamchk为例子进行说明。当发现某个数据表出现问题时可以使用:
myisamchktablename.MYI
进行检测,如果需要修复的话,可以使用:
myisamchk-oftablename.MYI
关于myisamchk的详细参数说明,可以参见它的使用帮助。需要注意的时在进行修改时必须确保MySQL服务器没有访问这个数据表,保险的情况下是最好在进行检测时把MySQL服务器Shutdown掉。
-----------------------------
另外可以把下面的命令放在你的rc.local里面启动MySQL服务器前:
[-x/tmp/mysql.sock]&&/pathtochk/myisamchk-of/DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL监听的Sock文件位置,对于使用RPM安装的用户应该是/var/lib/mysql/mysql.sock,对于使用源码安装则是/tmp/mysql.sock可以根据自己的实际情况进行变更,而pathtochk则是myisamchk所在的位置,DATA_DIR是你的MySQL数据库存放的位置。
需要注意的时,如果你打算把这条命令放在你的rc.local里面,必须确认在执行这条指令时MySQL服务器必须没有启动!检测修复所有数据库(表)
本回答由提问者推荐
Mysql 的主从复制,最多支持多少个数据库同步
主从复制理论上支持无穷大的从库个数,实际情况下,受服务器带宽和读写能力的影响
请参考MySQL官方手册的建议:
理论上,通过使用单个主服务器/多从服务器设置,可以通过添加更多的从服务器来扩充系统,直到用完网络带宽,或者你的更新负载已经增长到主服务器不能处理的点。
在获得的收益开始吃平之前,为了确定可以有多少从服务器,以及可以将你的站点的性能提高多少,需要知道查询模式,并且要通过基准测试并根据经验确定一个典型的主服务器和从服务器中的读取(每秒钟读取量,或者max_reads)吞吐量和写(max_writes)吞吐量的关系。通过一个假设的带有复制的系统,本例给出了一个非常简单的计算结果。
假设系统负载包括10%的写和90%的读取,并且我们通过基准测试确定max_reads是1200–2×max_writes。换句话说,如果没有写操作,系统每秒可以进行1,200次读取操作,平均写操作是平均读操作所用时间的两倍,并且关系是线性的。我们假定主服务器和每个从服务器具有相同的性能,并且我们有一个主服务器和N个从服务器。那么,对于每个服务器(主服务器或从服务器),我们有:
reads=1200–2×writes
reads=9×writes/(N+1)(读取是分离的,但是写入所有服务器)
9×writes/(N+1)+2×writes=1200
writes=1200/(2+9/(N+1))
最后的等式表明了N个从服务器的最大写操作数,假设最大可能的读取速率是每分钟1,200次,读操作与写操作的比率是9。
如上分析可以得到下面的结论:
·如果N=0(这表明没有复制),系统每秒可以处理大约1200/11=109个写操作。
·如果N=1,每秒得到184个写操作。
·如果N=8,每秒得到400个写操作。
·如果N=17,每秒得到480个写操作。
kettle如何进行MySQL数据库与HDFS的实时数据同?ke
kettle做不了实时的 希望我的回答对你有用。
有什么方案么hbase中的数据想实时往mysql中进行同步?hb
使用Python写个脚本框架,做成实时同步
如何配置两个MySQL数据库之间的主从同步功能
一、概述
MySQL从3.23.15版本以后提供数据库复制(replication)功能,利用该功能可以实现两个数据库同步、主从模式、互相备份模式的功能。本文档主要阐述了如何在linux系统中利用mysql的replication进行双机热备的配置。
二、环境
操作系统:Linux 2.6.23.1-42.fc8 # SMP(不安装XEN)
Mysql版本:5.0.45-4.fc8
设备环境:PC(或者虚拟机)两台
三、配置
数据库同步复制功能的设置都在MySQL的配置文件中体现,MySQL的配置文件(一般是my.cnf):在本环境下为/etc/my.cnf。
3.1 设置环境:
IP的设置:
A主机 IP:10.10.0.119
Mask:255.255.0.0
B主机 IP:10.10.8.112
Mask:255.255.0.0
在IP设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status查看防火墙状态。如果防火墙状态
为仍在运行。使用service iptables stop来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。
最终以两台主机可以相互ping通为佳。
3.2 配置A主(master) B从(slave)模式
3.2.1 配置A 为master
、增加一个用户同步使用的帐号:
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 database test;
、创建一个表结构:
create table mytest (username varchar(20),password varchar(20));
、修改配置文件:
修改A的/etc/my.cnf文件,在my.cnf配置项中加入下面配置:
server-id = 1#Server标识
log-bin
binlog-do-db=test #指定需要日志的数据库
、重起数据库服务:
service mysqld restart
查看server-id:
show variable like ‘server_id’;
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id| 1|
+---------------+-------+
1 row in set (0.00 sec)
、用show master status/G命令看日志情况。
正常为:
mysql> show master status/G
*************************** 1. row ***************************
File: mysqld-bin.000002
Position: 198
Binlog_Do_DB: test,test
Binlog_Ignore_DB:
1 row in set (0.08 sec)
3.2.2 配置B 为slave
、增加一个数据库作为同步数据库:
create database test;
、创建一个表结构:
create table mytest (username varchar(20),password varchar(20));
、修改配置文件:
修改B的/etc/my.cnf文件,在my.cnf配置项中加入下面配置:
server-id=2
master-host=10.10. 0.119
master-user=backup#同步用户帐号
master-password=1234
master-port=3306
master-connect-retry=60 #预设重试间隔秒
replicate-do-db=test#告诉slave只做backup数据库的更新
、重起数据库服务:
service mysqld restart
查看server-id:
show variables like ‘server_id’;
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id| 2|
+---------------+-------+
1 row in set (0.00 sec)
、用show slave status/G命令看日志情况。
正常为:
mysql> show slave status/G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.10.0.119
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysqld-bin.000001
Read_Master_Log_Pos: 98
Relay_Log_File: mysqld-relay-bin.000003
Relay_Log_Pos: 236
Relay_Master_Log_File: mysqld-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: test,test
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 98
Relay_Log_Space: 236
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
1 row in set (0.01 sec)
3.2.3 验证配置
分别使用insert, delete , update在A主机进行增删改查数据库;查看B主机的数据库是否与A主机一致;若一致,则配置成功。
3.3双机互备模式
如果在A主机加入slave设置,在B主机加入master设置,则可以做B->A的同步。
、在A主机的配置文件中 mysqld配置项加入以下设置:
master-host=10.10.8.112
master-user=backup
master-password=1234
replicate-do-db=test
master-connect-retry=10
、在B的配置文件中 mysqld配置项加入以下设置:
log-bin
binlog-do-db=test
注意:当有错误产生时,*.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 slave1. ip的设置:a主机 ip:10.10.0.119;mask:255.255.0.0;b主机 ip:10.10.8.112;mask:255.255.0.0
2. 在ip设置完成以后,需要确定两主机的防火墙确实已经关闭。可以使用命令service iptables status查看防火墙状态。如果防火墙状态。
3. 为仍在运行。使用service iptables stop来停用防火墙。如果想启动关闭防火墙,可以使用setup命令来禁用或定制。最终以两台主机可以相互ping通为佳。
4. 3.2 配置a主(master) b从(slave)模式;3.2.1 配置a 为master。
5. 增加一个用户同步使用的帐号:
grant file on *.* to ‘backup’@'10.10.8.112' identified by ‘1234’;
grantreplication slave on *.* to ‘backup’@'10.10.8.112' identified by ‘1234’。
6. 赋予10.10.8.112也就是slave机器有file权限,只赋予slave机器有file权限还不行,还要给它replication slave的权限才可以。
7. 增加一个数据库作为同步数据库:create database test;
8. 创建一个表结构:create table mytest (username varchar(20),password varchar(20));
9. 修改配置文件:修改a的/etc/my.cnf文件。
10. 在my.cnf配置项中加入下面配置:
11. server-id = 1 #server标识
log-bin
binlog-do-db=test #指定需要日志的数据库
12. 重起数据库服务:
service mysqld restart
查看server-id:
show variable like ‘server_id’。
mysql的主从复制通过什么方式完成数据同步
要实现MySQL 的 Replication ,首先必须打开 Master 端的 Binary Log,因为整个复制过程实际上就是 Slave 从 Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。
看上去MySQL的Replication原理非常简单,总结一下:
* 每个从仅可以设置一个主。
* 主在执行sql之后,记录二进制log文件(bin-log)。
* 从连接主,并从主获取binlog,存于本地relay-log,并从上次记住的位置起执行sql,一旦遇到错误则停止同步。mysql的主从复制开启之后,从数据库会立马复制主数据库中的数据。
然后,对主数据库进行增,删,改操作之后,从数据库也会进行相同的操作。
不过,对从数据库进行增,删,改操作的话,对主数据库是没有任何影响的
标签:slave,数据库,MySQL,master,mysql,服务器,主从,延迟 From: https://blog.51cto.com/yetaotao/5808579