這個確實簡單MYSQL支持這種復制語法:insert
創(chuàng)新互聯(lián)主營赤坎網站建設的網絡公司,主營網站建設方案,app軟件開發(fā)公司,赤坎h5小程序定制開發(fā)搭建,赤坎網站營銷推廣歡迎赤坎等地區(qū)企業(yè)咨詢
into
`tb`(`field1`,`field2`..)
select
`field1`,`field2`..
from
`tb`;注意修改為你自己的表名和字段名兩個字段列表(`field1`,`field2`..)數(shù)量要相同你要全字段復制,就把除了自增字段之外的所有字段都列出來
MySQL臨時目錄用于存儲臨時文件或臨時表,值可以是一個使用“:”(Unix)或“;”(Windows)分隔的路徑列表,這些路徑可被輪流使用,以便將負載分到不同磁盤。
若MySQL server是作為Slave的角色,則不能將該目錄指向基于內存文件系統(tǒng)的目錄或者當主機重啟時會被清理掉的目錄,因為Slave需要這些文件復制臨時表或執(zhí)行LOAD DATA INFILE操作,這些文件丟失會導致復制失敗。這意味著不能將slave的tmpdir設置為linux系統(tǒng)默認的/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
臨時表可能是非常有用的,在某些情況下,保持臨時數(shù)據(jù)。最重要的是應該知道的臨時表是,他們將當前的客戶端會話終止時被刪除。
臨時表中添加MySQL版本3.23。如果您使用的是舊版本的MySQL比3.23,可以不使用臨時表,但可以使用堆表。
如前所述臨時表將只持續(xù)只要的會話是存在的。如果運行一個PHP腳本中的代碼,該臨時表將被銷毀時,會自動執(zhí)行完腳本后。如果已連接到MySQL數(shù)據(jù)庫的服務器上,通過MySQL的客戶端程序的臨時表將一直存在,直到關閉客戶端或手動破壞的表。
實例
下面是一個例子,使用臨時表在PHP腳本中,使用mysql_query()函數(shù),可以使用相同的代碼。
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)
當發(fā)出一個SHOW
TABLES命令,那么臨時表將不會被列在列表中。現(xiàn)在如果將MySQL的會話的注銷,那么會發(fā)出SELECT命令,那么會發(fā)現(xiàn)沒有在數(shù)據(jù)庫中的數(shù)據(jù)。即使臨時表也就不存在了。
刪除臨時表:
默認情況下,所有的臨時表被刪除時,MySQL的數(shù)據(jù)庫連接被終止。不過要刪除他們之前就應該發(fā)出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環(huán)境某一個庫里一個表復制一份,故整理記錄方法如下:復制整個表create table new_table select * from old_table;
復制表,不復制數(shù)據(jù)create table new_table select * from old_table where 0;
主鍵,索引,自增等其他額外特征不會被帶到新表中。這點和其他的數(shù)據(jù)庫產品類似。
GTID 對于單源復制還是很方便,但是對于多源復制,這里就需要特別注意:
要先停止所有的從庫 stop slave;
然后清理本機所有的 GTID,reset master;
再進行 SET @@GLOBAL.GTID_PURGED='xxxxx' gtid 設置
這里就會引入一個問題,如果是級聯(lián)復制的情況下,reset master 的時候,會把本機的所有 binlog 清理掉。如果下一級的從庫存在延遲,沒有及時的把 binlog 傳過去,就會造成主從中斷,這里我們該怎么避免呢?看這里:
做 reset master 的時候,先看看下游的從庫是否存在很大的延遲。如果存在,把當前的 binlog 和后面未同步的 binlog 全部備份下;
待添加好從庫的 channel 后,再把未同步的 binlog 文件手動拷貝到 binlog 目錄;
更新下 mysql-bin.index 文件;
注意,binlog 不能同名,需要手動更新下文件。