1、復制表結構(語法
成都創新互聯是一家專注于成都網站制作、成都網站設計與策劃設計,歷城網站建設哪家好?成都創新互聯做網站,專注于網站建設10多年,網設計領域的專業建站公司;建站業務涵蓋:歷城等地區。歷城做網站價格咨詢:028-86922220
creata
table
舊表
select
*
from
新表)
create
table
t1(
id
int
unsigned
auto_increment
primary
key,
name
varchar(32)
not
null
default
'',
pass
int
not
null
default
);
desc
查看表結構
創建表
t2
同時復制表
t1
表結構
create
table
t2
select
*
from
t1;
desc
t2
查看表結構
注意:兩張的表字段結構一樣,但是
主鍵
primary
key
和
自增
auto_increment
沒有了,所以這種方法不推薦大家使用,那如何才能創建出兩張完全一樣的表呢,辦法肯定有的,如下面語句。
create
table
t2
like
t1;
這就可以創建一張
t2
和
t1
完全一樣的表了。
2、指定字段復制表結構
語法:
create
table
新表
select
字段1,字段2
…
from
舊表
3、復制表中數據
假設要把表
t1
中的數據全部復制到表
t2中
insert
into
t2
select
* from
t1;
如果只想復制某個字段
insert
into
t2(字段1,字段2)
select
字段1,字段2 from
t1;
這種架構一般用在以下三類場景
1. 備份多臺 Server 的數據到一臺如果按照數據切分方向來講,那就是垂直切分。比如圖 2,業務 A、B、C、D 是之前拆分好的業務,現在需要把這些拆分好的業務匯總起來備份,那這種需求也很適用于多源復制架構。實現方法我大概描述下:業務 A、B、C、D 分別位于 4 臺 Server,每臺 Server 分別有一個數據庫來隔離前端的業務數據,那這樣,在從庫就能把四臺業務的數據全部匯總起來,而不需要做額外的操作。那沒有多源復制之前,要實現這類需求,只能在匯總機器上搭建多個 MySQL 實例,那這樣勢必會涉及到跨庫關聯的問題,不但性能急劇下降,管理多個實例也沒有單臺來的容易。
2. 用來聚合前端多個 Server 的分片數據。
同樣,按照數據切分方向來講,屬于水平切分。比如圖 3,按照年份拆分好的數據,要做一個匯總數據展現,那這種架構也非常合適。實現方法稍微復雜些:比如所有 Server 共享同一數據庫和表,一般為了開發極端透明,前端配置有分庫分表的中間件,比如愛可生的 DBLE。
3. 匯總并合并多個 Server 的數據
第三類和第一種場景類似。不一樣的是不僅僅是數據需要匯總到目標端,還得合并這些數據,這就比第一種來的相對復雜些。比如圖 4,那這樣的需求,是不是也適合多源復制呢?答案是 YES。那具體怎么做呢?
項目上 MySQL?還原 SQL 備份經常會碰到一個錯誤如下,且通常出現在導入視圖、函數、存儲過程、事件等對象時,其根本原因就是因為導入時所用賬號并不具有SUPER 權限,所以無法創建其他賬號的所屬對象。ERROR 1227 (42000) : Access denied; you need (at least one of) the SUPER privilege(s) for this operation常見場景:1. 還原 RDS 時經常出現,因為 RDS 不提供 SUPER 權限;2. 由開發庫還原到項目現場,賬號權限等有所不同。
處理方式:
1. 在原庫中批量修改對象所有者為導入賬號或修改?SQL SECURITY?為?Invoker;2. 使用 mysqldump 導出備份,然后將 SQL 文件中的對象所有者替換為導入賬號。
二、問題原因我們先來看下為啥會出現這個報錯,那就得說下 MySQL 中一個很特別的權限控制機制,像視圖、函數、存儲過程、觸發器等這些數據對象會存在一個?DEFINER?和一個?SQL SECURITY?的屬性,如下所示:
--視圖定義CREATE?ALGORITHM?=?UNDEFINED?DEFINER?=?`root`@`%`?SQL?SECURITY?DEFINER?VIEW?v_test
--函數定義CREATE?DEFINER=`root`@`%`?FUNCTION?`f_test()`?RETURNS?varchar(100)?SQL?SECURITY?DEFINER
--存儲過程定義CREATE?DEFINER=`root`@`%`?PROCEDURE?`p_test`()?SQL?SECURITY?DEFINER
--觸發器定義CREATE DEFINER=`root`@`%` trigger t_test
--事件定義CREATE DEFINER=`root`@`%` EVENT `e_test`
DEFINER:對象定義者,在創建對象時可以手動指定用戶,不指定的話默認為當前連接用戶;
SQL SECURITY:指明以誰的權限來執行該對象,有兩個選項,一個為?DEFINER,一個為?INVOKER,默認情況下系統指定為 DEFINER;DEFINER:表示按定義者的權限來執行;?INVOKER:表示按調用者的權限來執行。
如果導入賬號具有 SUPER 權限,即使對象的所有者賬號不存在,也可以導入成功,但是在查詢對象時,如果對象的?SQL SECURITY?為?DEFINER,則會報賬號不存在的報錯。ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist
改寫好處:1. 可以避免還原時遇到 DEFINER 報錯相關問題;2. 根據輸出信息知道備份是否正常進行,防止備份中遇到元數據鎖無法獲取然后一直卡住的情況。
有兩種辦法。
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
可以利用光盤引導啟動進入PE系統后完整拷貝硬盤內的所有數據。
所有東西完整導出到移動硬盤可以通過硬盤克隆來完成。詳細操作步驟如下:
1、安裝并打開軟件,主頁面找到“克隆”欄,選擇“磁盤克隆”。
2、選擇源磁盤(要導出的磁盤)
3、選擇目標磁盤(要導入的磁盤)
4、選擇好兩個磁盤,點擊“開始備份”。
5、在備份詳情頁面顯示備份進度和詳細過程。
6、進度條100%后,點擊“完成”就導出所有的內容到移動硬盤了。
補充說明:移動硬盤缺點:損毀基本無法恢復:除此之外同固態硬盤一樣,在硬受到物理損壞時數據是無法恢復的,不過這種情況只是小概率事件,基本不會遇到。
我google了一下大概有一下幾個方法,
1.復制表結構及數據到新表
CREATE TABLE 新表 SELECT * FROM 舊表
2.只復制表結構到新表
CREATE TABLE 新表 SELECT * FROM 舊表 WHERE 1=2
即:讓WHERE條件不成立.
3.復制舊表的數據到新表(假設兩個表結構一樣)
INSERT INTO 新表 SELECT * FROM 舊表
4.復制舊表的數據到新表(假設兩個表結構不一樣)
INSERT INTO 新表(字段1,字段2,.......) SELECT 字段1,字段2,...... FROM 舊表
網頁名稱:mysql數據怎么復制 mysql數據庫數據文件直接復制
文章位置:http://m.kartarina.com/article0/hjgjoo.html
成都網站建設公司_創新互聯,為您提供域名注冊、網站設計、面包屑導航、網站維護、品牌網站建設、品牌網站制作
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯