-
MySQL数据库的复制类型简介及主从复制配置
2019-10-15 19:36:27MySQL复制类型 异步复制 MySQL默认的复制,主库完成事务时立即将结果返回给客户端,并不关心从库是否接受并处理,因此此类型的响应速度快,但是数据的可靠性低。 全同步复制 当主库执行完一个事务,并且所有从库...MySQL复制类型
异步复制
MySQL默认的复制,主库完成事务时立即将结果返回给客户端,并不关心从库是否接受并处理,因此此类型的响应速度快,但是数据的可靠性低。
全同步复制
当主库执行完一个事务,并且所有从库也都执行完该事务时才给客户端返回结果,所以全同步复制的数据可靠性极高。
半同步复制
MySQL5.5以后才开始支持的半同步复制,介于上两者之间。主库在执行完一个事务后,等待至少一个从库收到并写入到中继日志中才返回给客户端,所以相对于全同步来说缩短了响应时间。
因为这个延迟的时间至少是一个TCP/IP的往返时间,所以最好在低延迟的网络中使用。MySQL的复制方式
- 基于SQL语句复制(SBR)
- 基于行的复制(RBR)
- 混合模式复制(MBR)
- 基于GTIDS复制(MySQL5.6.5以后采用该复制方式,对事务的复制)
部署MySQL主从复制(异步)
实验环境
Master:192.168.200.112
slave1:192.168.200.111
slave2:192.168.200.11准备工作
所有机器关闭防火墙及selinux
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# iptables -F [root@localhost ~]# setenforce 0
为了保证实验顺利进行,还需要对三台服务器进行时间同步。
Master:[root@localhost ~]# yum -y install ntp [root@localhost ~]# vim /etc/ntp.conf #添加两行 server 127.127.1.0 fudge 127.127.1.0 startum 8 [root@localhost ~]# systemctl start ntpd
slave1、2
[root@localhost ~]# yum -y install ntpdate [root@localhost ~]# ntpdate 192.168.200.112
所有机器安装mysql,这里是用yum安装的mariadb,效果一样
[root@localhost ~]# yum -y install mariadb mariadb-server
配置主服务器
修改配置文件
[root@localhost ~]# vim /etc/my.cnf #手动修改或添加 [mysqld] server-id=1 //主从不能相同!! log-bin=mysql-binlog //开启二进制日志,后面是文件的前缀名 log-slave-ipdates=ture //允许从服务器更新数据
开启服务器
[root@localhost ~]# systemctl start mariadb
创建授权账号、刷新授权表
MariaDB [(none)]> grant replication slave on *.* to 'myslave'@'192.168.200.%' identified by '123456' MariaDB [(none)]> flush privileges;
replication slave:用于复制型从服务器(从主服务器中读取二进制日志的权限)
查看状态并记下文件名及位置编号,也就是File和Position的值。
MariaDB [(none)]> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 1261 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
注意,在进行主从复制的时候,如果master以前就有部分数据,为了保持数据的一致性,可以将原始数据进行一次全备,发送给从服务器。
配置从服务器
Slave1主配置文件
[root@localhost ~]# vim /etc/my.cnf #手动修改或添加 server-id=2 relay-log=relay-log-bin //前缀名 relay-log-index=slave-relay-bin.index //索引文件
Slave2主配置文件
[root@localhost ~]# vim /etc/my.cnf #手动修改或添加 server-id=3 relay-log=relay-log-bin //前缀名 relay-log-index=slave-relay-bin.index //索引文件
修改完重启数据库
[root@localhost ~]# systemctl restart mariadb
启动从库,进行主从库数据同步,Slave1、2相同
[root@localhost ~]# mysql MariaDB [(none)]> change master to ->master_host='192.168.200.112', ->master_user='myslave', ->master_password='123456', ->master_log_file='mysql-bin.000003', ->master_log_pos='1261'; MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.200.112 Master_User: myslave Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000004 Read_Master_Log_Pos: 245 Relay_Log_File: relay-log-bin.000007 Relay_Log_Pos: 529 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: 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: 245 Relay_Log_Space: 1105 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 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 1 row in set (0.00 sec)
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
可以看到从库中的IO线程和SQL线程的开启状态都是“YES”测试
所有库查看下库中信息
在主库中创建一个新库,观察从库的情况
MariaDB [(none)]> create database good; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | ab | | good | | mysql | | performance_schema | | test | +--------------------+ 6 rows in set (0.00 sec)
-
ORACLE数据库复制,含有BLOB类型的字段
2019-03-19 19:30:03场景:拷贝一个数据库,其中一张表里含有BLOB类型字段,在执行sql时报错 ORA-01704: 文字字符串过长! 网上通过存储过程,把字段作为变量,再插入到表中。但不太可能批量执行。 最终解决:通过远程数据库,将数据...场景:拷贝一个数据库,其中一张表里含有BLOB类型字段,在执行sql时报错
ORA-01704: 文字字符串过长!
网上通过存储过程,把字段作为变量,再插入到表中。但不太可能批量执行。
最终解决:通过远程数据库,将数据直接插入本地数据可以执行。
--创建oracle远程连接-- CREATE PUBLIC DATABASE LINK linkname CONNECT TO 用户名 IDENTIFIED BY 密码 USING '192.168.30.109:1521/orcl'; --关闭远程连接-- DROP PUBLIC DATABASE LINK linkname; --查询远程库的表,不能含有CLOB blob字段-- select ID_, NAME_ from ACT_GE_BYTEARRAY@linkname; --先创建表-- insert into ACT_GE_BYTEARRAY select *from ACT_GE_BYTEARRAY@linkname;
-
mysql navicat 复制数据库_数据库复制-Navicat Premium
2021-01-20 22:17:04之前都是“备份-还原”,抑或“导出-导入...将工具下载并安装完成后,打开客户端,【连接】-【SQL Server】(根据自己要连接的数据库类型进行选择)如下图:2. 新建连接,配置数据库的连接信息,只需一次,如下图:3....之前都是“备份-还原”,抑或“导出-导入”。今天在将SqlServer中的数据导入到MySql中时发现了一个非常方便的方法,无需任何繁琐的配置和操作。废话少说,进入正题:
工具:Navicat Premium(点击下载)
1. 将工具下载并安装完成后,打开客户端,【连接】-【SQL Server】(根据自己要连接的数据库类型进行选择)如下图:
2. 新建连接,配置数据库的连接信息,只需一次,如下图:
3. 将源数据库和目标数据库都配置好,如下图:
4. 这里是将SQL Server中的PlatformInfo导入到MySQL中的platforminfo
5. 右键点击源数据库“PlatformInfo”,选择“数据传输...”,如下图:
6. 模式选择为dbo,表可以自行选择特定的哪几张表,默认全选。选择目标数据库,然后点击“开始”。如下图:
7. 信息提示,选择“确定”,如下图:
8. 传输过程,如下图:
9. 传输完成后关闭数据传输窗口,然后刷新目标数据库,如下图:
10. 刷新后可以看到源数据库中的表已经到了目标数据库中,如下图:
2015.11.16 9:56 willem SQL Server数据库向My SQL数据库导入数据,其他数据库之间的导入数据操作类似
-
mysql数据库复制数据库至文件夹_用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题...
2021-01-19 10:24:22用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题提示找不到表,我去看了一下,丢失了很多个表;问题:直接拷贝data下的数据库数据进行备份 , 发现部分数据表不见了。原因 :以表“Table”为例: ...用复制mysql/data 文件夹 下面的数据库的形式来复制数据库出现的问题
提示找不到表,我去看了一下,丢失了很多个表;
问题:
直接拷贝data下的数据库数据进行备份 , 发现部分数据表不见了。
原因 :
以表“Table”为例: 如类型是MyISAM, 数据文件则以”Table.frm”,”Table.MYD”,”Table.MYI”三个文件存储于”/data/databasename/”目录中. 如类型是InnoDB, 数据文件则存储在”/data/″中的ibdata1文件中(一般情况),结构文件存在于Table.frm中. MySQL的数据库文件直接复制便可以使用,但是那是指“MyISAM”类型的表。 而使用MySQL-Front直接创建表,默认是“InnoDB”类型,这种类型的一个表在磁盘上只对应一个“*.frm”文件,不像MyISAM那样还“*.MYD,*.MYI”文件。 MyISAM类型的表直接拷到另一个数据库就可以直接使用,但是InnoDB类型的表却不行。
解决方法就是:
同时拷贝innodb数据库表“*.frm”文件和innodb数据“ibdata1”文件到合适的位置。启动MySQL的Windows服务 由于MySQL这样数据混杂的形式, 往往很容易让使用者在备份时忘记了备份InnoDB, 从而导致了上述错误。
如果还是有问题,停止mysql服务,将目录下的ib_logfile*文件全部删除掉,重新启动mysql服务。
总结:
1,在进行mysql数据库备份的或迁移的时候,尽量备份完成所需要的数据;
2,如果直接拷贝原有数据库文件"*.frm"、"*.MYD"、"*.MYI"等文件时候,如果原数据库引擎是InnoDB,切记还需拷贝ibdata1文件
3,备份数据库的时候,最好是用相关的工具进行备份或是导出sql文件,以免浪费时间在数据库恢复上
4,msyql版本或是备份工具的版本不同,也可能引起数据恢复有问题。
-
SQL Server数据库复制
2016-08-27 21:47:00事务复制是一种复制类型,对订阅服务器上应用的初始数据快照,然后当发布服务器上发生数据修改时,将捕获到个别的事务并传播到订阅服务。 事务复制的原理是先将发布服务器数据库中的初始快照发送到各订阅服务器,... -
[20141208]数据库复制并不会复制索引创建删除
2019-09-28 22:43:43[20141208]数据库复制并不会复制索引创建删除 背景: 因为一个语句传入的参数和表中类型不一致,然后就修改类型。碰到有依赖列的索引,所以删除了索引,修改,然后创建索引。 问题和原因: 导致在... -
redis-copy, 将一个redis数据库复制到另一个数据库.zip
2019-09-18 09:09:25redis-copy, 将一个redis数据库复制到另一个数据库 RedisCopy这个工具提供了一种将一个redis数据库的内容移动到另一个redis数据库的方法。 代码是由包含在redis源代码中的 redis-copy.rb 脚本插件激发的,但目标是... -
SQL Server学习_数据库复制
2018-09-21 11:20:17数据库复制 在网上看到一个数据库复制,感觉挺有意思的 一般情况下最好定期备份,这只是练习 /** *复制表结构的通用存储过程 */ -- Transfer对象的重要属性 -- 1. 属性 属性名 类型 描述 ----------------... -
数据库复制并不会复制索引创建删除
2017-10-30 20:54:00背景: 因为一个语句传入的参数和表中类型不一致...导致在数据库事务复制下,没有复制索引的删除和创建,导致复制报错 本文转自 Fanr_Zh 博客园博客,原文链接:http://www.cnblogs.com/Amaranthus/p/4150993.htm... -
利用SQL-Plus复制遗留的Oracle数据表_数据库复制表
2020-09-03 07:51:57你可能运行的是 Oracle 10g Release 2 数据库服务器 但是需要支持某些应用程序可能是 很早之前写好的在 Oracle 8i 之前的版本创建的数据表常用 LONG 数据类型来存储大型文 本 随着 Large Object LOB 数据类型的引入 ... -
MYSQL INNODB类型数据库迁移/备份/复制方法
2020-07-06 09:30:25众所周知,MYSQL MyISAM类型数据库的备份迁移方法很容易,直接复制数据库文件就可以,不过 需要注意的是复制前要先关闭MYSQL服务。 对于数据量小的数据库,INNODB类型的数据库的可行的迁移方法如下: 1. 先导... -
数据库经典类型题
2019-02-28 22:06:401、MySQL的复制原理以及流程(基本原理流程,3个线程以及之间的关联;) 主:binlog(负责记录表和库变更的二进制文件,可以用于本机的数据恢复和主从同步)线程将改变了数据库的语句进行记录,放进master上面的binlog中 ... -
【SQL Server高可用性】数据库复制:SQL Server 2008R2中通过数据库复制,把A表的数据复制到B表...
2013-12-01 20:54:00经常在论坛中看到有人问数据同步的技术,如果只是同步少量的表,那么可以考虑使用链接服务器+触发器,来实现数据同步,但当要同步的数据表比较多,那么可以考虑用数据库复制技术,来实现数据的同步。 不同的发布类型... -
Linux下Mysql数据库复制中二进制文件的一些参数介绍+日志类型
2019-03-13 10:53:17日志类型: 错误日志(error log) 常规日志(general log) 二进制日志(bin log) 中继日志(relay log) 慢日志(slow log) InnoDB引擎的redo log 这里查看的是跟binlog有关的变量(这是因为之前在搭建MHA高...