mysql怎么复制命令 mysql复制快捷键

mysql如何复制数据到同一张表?

在利用数据库开发时,常常会将一些表之间的数据互相导入。当然可以编写程序实现,但是,程序常常需要开发环境,不方便。最方便是利用sql语言直接导入。既方便而修改也简单。以下就是导入的方法。

创新互联公司从2013年创立,先为凌源等服务建站,凌源等地企业,进行企业商务咨询服务。为凌源企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

1、 表结构相同的表,且在同一数据库(如,table1,table2)

Sql :

复制代码代码如下:

insert into table1 select * from table2 (完全复制)

insert into table1 select distinct * from table2(不复制重复纪录)

insert into table1 select top 5 * from table2 (前五条纪录)

2、不在同一数据库中(如,db1 table1,db2 table2)

sql:

[code]

insert into db1.table1 select * from db2.table2 (完全复制)

insert into db1.table1 select distinct * from db2table2(不复制重复纪录)

insert into tdb1.able1 select top 5 * from db2table2 (前五条纪录)

3、表结构不同的表或复制部分纪录(如,dn_user,dn_user2)

a. 建一个新表[DN_UserTemp](在老表dn_user上增加一列)

复制代码代码如下:

CREATE TABLE [DN_UserTemp] ( [Num] [numeric](18, 0) IDENTITY (1, 1) NOT NULL)

[Id] [idtype] NOT NULL ,

[Name] [fntype] NOT NULL ,

[Descript] [dstype] NULL ,

[LogonNm] [idtype] NOT NULL ,

[Password] [idtype] NULL ,

[Gender] [char] (1) NULL ,

[Quited] [booltype] NOT NULL,

[OffDuty] [booltype] NOT NULL ,

[Stopped] [booltype] NOT NULL,

[OSBind] [booltype] NOT NULL,

[Domain] [idtype] NULL ,

[EMail] [fntype] NULL ,

[UnitId] [idtype] NULL ,

[BranchId] [idtype] NULL ,

[DutyId] [idtype] NULL ,

[LevelId] [idtype] NULL ,

[ClassId] [idtype] NULL ,

[TypeId] [idtype] NULL ,

[IP] [varchar] (15) COLLATE Chinese_PRC_CI_AS NULL ,

[ExpireDT] [datetime] NULL ,

[Sort] [int] NOT NULL ,

[AllowDel] [booltype] NOT NULL,

[UnitChief] [booltype] NOT NULL,

[BranchChief] [booltype] NOT NULL ,

[UnitDeputy] [booltype] NOT NULL ,

[BranchDeputy] [booltype] NOT NULL ,

[Num] [numeric](18, 0) IDENTITY (1, 1) NOT NULL

) ON [PRIMARY]

b. 将dn_uer2的数据拷入dn_usertemp

sql:insert into dn_usertemp select * from dn_user2

c.将dn_usertemp 拷入dn_user

sql:

复制代码代码如下:

declare @i int

declare @j int

declare @Name fntype

set @i=1

select @j=count(*) from dn_usertemp

while @i@j 1

begin

select @Name=Name from dn_usertemp where Num=@i

print @Name

insert into dn_user (Name) values (@Name) where Num=@i

select @i=@i 1

end

MySql数据库复制表数据

将 production 数据库中的 mytbl 表快速复制为 mytbl_new,2个命令如下:

复制代码代码如下:

CREATE TABLE mytbl_new LIKE production.mytbl;

INSERT mytbl_new SELECT * FROM production.mytbl;

第一个命令是创建新的数据表 mytbl_new ,并复制 mytbl 的数据表结构。

第二个命令是讲数据表 mytbl 中的数据复制到新表 mytbl_new 。

注:production.mytbl是指定要复制表的数据库名称为 production 。它是可选的。

假如没有production. ,MySQL数据库将会假设mytbl在当前操作的数据库。

另外:在mysql数据库中复制数据为:

复制代码代码如下:

select * into desTable from sourceTable在mssql中支持,在mysql中不支持

insert into desTable select * from sourceTable

mysql 异步复制和半同步复制

在MySQL5.5之前,MySQL 的复制是异步操作,主库和从库的数据之间存在一定的延迟,这样存在一个隐患:当在主库上写入一个事务并提交成功,而从库尚未得到主库推送的Binlog日志时,主库宕机了,例如主库可能因磁盘损坏、内存故障等造成主库上该事务Binlog丢失,此时从库就可能损失这个事务,从而造成主从不一致。

为了解决这个问题, MySQL5.5引人了半同步复制机制。

在MySQL 5.5之前的异步复制时,主库执行完 Commit提交操作后,在主库写入 Binlog日志后即可成功返回客户端,无需等待Binlog日志传送给从库,如图31-7所示。

而半同步复制时,为了保证主库上的每一个 Binlog 事务都能够被可靠的复制到从库上,主库在每次事务成功提交时,并不及时反馈给前端应用用户,而是等待其中一个从库也接收到 Binlog事务并成功写入中继日志后,主库才返回Commit操作成功给客户端。 半同步复制保证了事务成功提交后,至少有两份日志记录 ,一份在主库的 Binlog日志上,另一份在至少一个从库的中继日志Relay Log 上,从而更进一步保证了数据的完整性。半同步复制的大致流程如图31-8所示。

半同步复制模式下,假如在图31-8的步骤1、2、3中的任何一个步骤中主库宕机,则事务并未提交成功,从库上也没有收到事务对应的 Binlog日志,所以主从数据是一致的;

假如在步骤4传送 Binlog日志到从库时,从库宕机或者网络故障,导致 Binlog并没有及时地传送到从库上,此时主库上的事务会等待一段时间(时间长短由参数rpl_semi_sync_master_timeout设置的毫秒数决定),如果 Binlog 在这段时间内都无法成功推送到从库上,则 MySQL自动调整复制为异步模式,事务正常返回提交结果给客户端。

半同步复制很大程度上取决于主从库之间的网络情况,往返时延RTT 越小决定了从库的实时性越好。通俗地说,主从库之间网络越快,从库越实时。

半同步模式是作为MySQL5.5的一个插件来实现的,主库和从库使用不同的插件。安装比较简单,在上一小节异步复制的环境上,安装半同步复制插件即可。

1、首先,判断MySQL服务器是否支持动态增加插件:

2、安装插件

3、可以查看到已安装的插件

4、在安装完插件后,半同步复制默认是关闭的,这时需设置参数来开启半同步

主:

从:

以上的启动方式是在命令行操作,也可写在配置文件中。

主:

从:

4、重启从上的IO线程

从:

如果没有重启,则默认还是异步复制,重启后,slave会在master上注册为半同步复制的slave角色。这时候,主的error.log中会打印如下信息:

查看半同步是否在运行

主:

从:

这两个变量常用来监控主从是否运行在半同步复制模式下。至此,MySQL半同步复制搭建完毕~

来做个实验,观察半同步状态参数的变化。

1、在主库上insert一条记录,观察下变化;

Rpl_semi_sync_master_net_waits加1,说明刚才的insert已经发送到从机并且主机还接收到从机的反馈响应;

2、我们将从机mysql停止,再次在主机上进行insert后查看状态

可以看到,主机进行insert阻塞了10秒才返回结果。Rpl_semi_sync_master_status变为OFF,Rpl_semi_sync_master_no_tx加1,说明这条insert没有同步到从机。后面再一次执行了insert立马返回了结果,说明此时已经降级为异步复制;Rpl_semi_sync_master_no_tx也是增加了1;

3、现在恢复启动从机,再次在主机上进行insert后查看状态

Rpl_semi_sync_master_status还是OFF,Rpl_semi_sync_master_no_tx又增加了1。说明从库重启并不会自动恢复为原来的半同步复制,需要手动操作:

主 SET GLOBAL rpl_semi_sync_master_enabled = 1;

从 SET GLOBAL rpl_semi_sync_slave_enabled = 1; STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

上面是从机重启后的变化,那么主到从之间的网络问题呢,我们可以利用防火墙来模拟。

对于全同步复制,当主库提交事务之后,所有的从库节点必须收到,APPLY并且提交这些事务,然后主库线程才能继续做后续操作。这里面有一个很明显的缺点就是,主库完成一个事务的时间被拉长,性能降低。

怎么才能完整复制MySQL数据库

有两种办法。

1、在B机器上装mysql。

将A机器上的mysql/data下的你的数据库目录整个拷贝下来。

将B机器上的mysql服务停止。

找到B机器上的mysql/data目录,将你拷贝的目录粘贴进去,然后启动mysql服务就可以了。

2、使用SQL语句备份和恢复

你可以使用SELECT INTO OUTFILE语句备份数据,并用LOAD DATA INFILE语句恢复数据。这种方法只能导出数据的内容,不包括表的结构,如果表的结构文件损坏,你必须要先恢复原来的表的结构。

语法:

SELECT * INTO {OUTFILE ¦ DUMPFILE} ’file_name’ FROM tbl_name

LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE ’file_name.txt’ [REPLACE ¦ IGNORE]

INTO TABLE tbl_name

SELECT ... INTO OUTFILE ’file_name’

在dos命令提示符下使用mysqldump命令进行备份.

如下:

C:\Documents and Settings\Administratormysqldump yinshi c:\\backup.txt -uroot

-p12142022


文章名称:mysql怎么复制命令 mysql复制快捷键
转载注明:http://myzitong.com/article/ddeeeii.html