十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
这个确实简单MYSQL支持这种复制语法:insert
创新互联主营赤坎网站建设的网络公司,主营网站建设方案,app软件开发公司,赤坎h5小程序定制开发搭建,赤坎网站营销推广欢迎赤坎等地区企业咨询
into
`tb`(`field1`,`field2`..)
select
`field1`,`field2`..
from
`tb`;注意修改为你自己的表名和字段名两个字段列表(`field1`,`field2`..)数量要相同你要全字段复制,就把除了自增字段之外的所有字段都列出来
MySQL临时目录用于存储临时文件或临时表,值可以是一个使用“:”(Unix)或“;”(Windows)分隔的路径列表,这些路径可被轮流使用,以便将负载分到不同磁盘。
若MySQL server是作为Slave的角色,则不能将该目录指向基于内存文件系统的目录或者当主机重启时会被清理掉的目录,因为Slave需要这些文件复制临时表或执行LOAD DATA INFILE操作,这些文件丢失会导致复制失败。这意味着不能将slave的tmpdir设置为linux系统默认的/tmp目录。
对于Slave可以使用另一配置项slave_load_tmpdir来设置其临时目录,这样Slave可以不使用通用选项tmpdir设置的临时目录,对于非Slave角色的MySQL server没此限制。
若临时目录不存在或权限不正确不仅会引起MySQL Server启动失败还会导致其他可能使用到临时目录的MySQL实用程序运行异常。很多MySQL相关程序会从MySQL Server的配置文件读取选项值。
MySQL 日志配置
MySQL的tmpdir临时文件说明及使用设置
一个MysQL /tmp目录爆满问题的处理
Shall I change the mysql tmpdir from /tmp to /var/lib/mysql/tmp ?
MySQL 临时目录
How to know if mysql tmpdir is being used?
MySQL, RAM disk for tmpdir
Changing the tmp folder of MySQL
临时表可能是非常有用的,在某些情况下,保持临时数据。最重要的是应该知道的临时表是,他们将当前的客户端会话终止时被删除。
临时表中添加MySQL版本3.23。如果您使用的是旧版本的MySQL比3.23,可以不使用临时表,但可以使用堆表。
如前所述临时表将只持续只要的会话是存在的。如果运行一个PHP脚本中的代码,该临时表将被销毁时,会自动执行完脚本后。如果已连接到MySQL数据库的服务器上,通过MySQL的客户端程序的临时表将一直存在,直到关闭客户端或手动破坏的表。
实例
下面是一个例子,使用临时表在PHP脚本中,使用mysql_query()函数,可以使用相同的代码。
mysql
CREATE
TEMPORARY
TABLE
SalesSummary
(
-
product_name
VARCHAR(50)
NOT
NULL
-
,
total_sales
DECIMAL(12,2)
NOT
NULL
DEFAULT
0.00
-
,
avg_unit_price
DECIMAL(7,2)
NOT
NULL
DEFAULT
0.00
-
,
total_units_sold
INT
UNSIGNED
NOT
NULL
DEFAULT
);
Query
OK,
rows
affected
(0.00
sec)
mysql
INSERT
INTO
SalesSummary
-
(product_name,
total_sales,
avg_unit_price,
total_units_sold)
-
VALUES
-
('cucumber',
100.25,
90,
2);
mysql
SELECT
*
FROM
SalesSummary;
+--------------+-------------+----------------+------------------+
|
product_name
|
total_sales
|
avg_unit_price
|
total_units_sold
|
+--------------+-------------+----------------+------------------+
|
cucumber
|
100.25
|
90.00
|
2
|
+--------------+-------------+----------------+------------------+
1
row
in
set
(0.00
sec)
当发出一个SHOW
TABLES命令,那么临时表将不会被列在列表中。现在如果将MySQL的会话的注销,那么会发出SELECT命令,那么会发现没有在数据库中的数据。即使临时表也就不存在了。
删除临时表:
默认情况下,所有的临时表被删除时,MySQL的数据库连接被终止。不过要删除他们之前就应该发出DROP
TABLE命令。
下面的例子为删除一个临时表。
mysql
CREATE
TEMPORARY
TABLE
SalesSummary
(
-
product_name
VARCHAR(50)
NOT
NULL
-
,
total_sales
DECIMAL(12,2)
NOT
NULL
DEFAULT
0.00
-
,
avg_unit_price
DECIMAL(7,2)
NOT
NULL
DEFAULT
0.00
-
,
total_units_sold
INT
UNSIGNED
NOT
NULL
DEFAULT
);
Query
OK,
rows
affected
(0.00
sec)
mysql
INSERT
INTO
SalesSummary
-
(product_name,
total_sales,
avg_unit_price,
total_units_sold)
-
VALUES
-
('cucumber',
100.25,
90,
2);
mysql
SELECT
*
FROM
SalesSummary;
+--------------+-------------+----------------+------------------+
|
product_name
|
total_sales
|
avg_unit_price
|
total_units_sold
|
+--------------+-------------+----------------+------------------+
|
cucumber
|
100.25
|
90.00
|
2
|
+--------------+-------------+----------------+------------------+
1
row
in
set
(0.00
sec)
mysql
DROP
TABLE
SalesSummary;
mysql
SELECT
*
FROM
SalesSummary;
ERROR
1146:
Table
'TUTORIALS.SalesSummary'
doesn't
exist
在工作中需要把MySQL环境某一个库里一个表复制一份,故整理记录方法如下:复制整个表create table new_table select * from old_table;
复制表,不复制数据create table new_table select * from old_table where 0;
主键,索引,自增等其他额外特征不会被带到新表中。这点和其他的数据库产品类似。
GTID 对于单源复制还是很方便,但是对于多源复制,这里就需要特别注意:
要先停止所有的从库 stop slave;
然后清理本机所有的 GTID,reset master;
再进行 SET @@GLOBAL.GTID_PURGED='xxxxx' gtid 设置
这里就会引入一个问题,如果是级联复制的情况下,reset master 的时候,会把本机的所有 binlog 清理掉。如果下一级的从库存在延迟,没有及时的把 binlog 传过去,就会造成主从中断,这里我们该怎么避免呢?看这里:
做 reset master 的时候,先看看下游的从库是否存在很大的延迟。如果存在,把当前的 binlog 和后面未同步的 binlog 全部备份下;
待添加好从库的 channel 后,再把未同步的 binlog 文件手动拷贝到 binlog 目录;
更新下 mysql-bin.index 文件;
注意,binlog 不能同名,需要手动更新下文件。