當前位置:首頁 » 數據倉庫 » mysql實例和資料庫
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

mysql實例和資料庫

發布時間: 2023-05-15 09:00:29

1. 如何初始化mysql資料庫

初始化mysql資料庫,在shell中運行以下命令:

cd /usr/local/mysql

mkdir sock

cd /usr/local/mysql/bin

初始化資料庫

./mysql_install_db--user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

或者# mysqld --initialize

(1)mysql實例和資料庫擴展閱讀

mysql資料庫的備份

1、物理冷備份,需要在資料庫關閉狀態下進行,能夠較好的保證資料庫的完整性。一般用於非核心業務,這類業務一般都允許終端,物理冷備份的特點就是速度快,恢復操作簡單。通常通過直接打包資料庫文件夾(如:/usr/local/mysql/data)來實現

2、通過啟用二進制日誌進行增量備份,MySQL支持增量備份,進行增量備份時必須啟用二進制日誌。二進制日誌文件為用戶提供復制,對執行備份點後進行的資料庫更改所需的信息進行恢復。如果進行增量備份,需要刷新二進制日誌。

2. MySQL(2)資料庫對象與應用

庫建立好之後基本不動,和我們接觸最頻繁的是表. 建表就是聲明欄位的過程!

選擇合適的類型[速度快 減少硬碟佔用]

存儲空間,還是存儲范圍有區別?
答案: 兩者本質完全一樣 ,只是在一些特殊情況下兩者顯示有區別(只是在顯示的時候補全0的位數不一樣)
實驗

*zerofill 零填充(本欄位同時即自動帶有unsigned屬性,因為負數不能零填充)
如 數字2在固定寬度4時 零填充 即為0002

M值是一個整數(固定寬度值),只有在欄位有零填充zerofill屬性時 規定M值才有意義!

M值只是 顯示效果 ,不會影響實際數據值!
如M值為1,實際值255,一樣會顯示255
列可以聲明默認值(推薦聲明)

因為null無法和別的值比較
null = 0 返回null
null <> 0 返回null

null只能用is或is not比較 null is null當然對的。

例子:

【浮點型】有誤差,不穩定!定點數更精確。
實際測試數據
Float(M,D)
M精度(總位數,不包含點) 精度值M 影響 存儲的 值的范圍.
D標度(小數位) 小數點後有幾位(mysql比較特殊,mssql/oracle都不能指定)
testcolumn float(5,2) unsigned; 范圍0到999.99
float(5,2)的范圍-999.99到999.99

給float(5,2)這樣的欄位插入值在進位時有一些規矩:暫時沒搞清楚,不是簡單的四捨五入
插入值688.826實際是688.83 末尾6 進位
插入值688.825實際是688.83 末尾5 進位
插入值688.824實際是688.82 末尾4 捨去
插入值688.005實際是688.00
插入值688.015實際是688.01 末尾5 5前面是1 捨去
插入值688.025實際是688.02 末尾5 5前面是2 捨去
插入值688.035實際是688.03 末尾5 5前面是3 捨去
插入值688.045實際是688.04 末尾5 5前面是4 捨去

一般使用tinyint、char(1)、enum類型。

varchar(M)
M代表寬度 即可容納的【字元數】 (並不是位元組數) varchar佔用的位元組數與編碼有關:
utf-8 一個漢字3位元組英文字母1位元組

對於utf8mb4號稱佔用4位元組但是並不絕對(在utf8可以覆蓋到的范圍則仍然佔用3位元組)

utf8mb4最有優勢的應用場景:存儲emoji表情

例子:

性能太差,不推薦

MySQL在5.6.4版本之後,TimeStamp和DateTime支持到微妙

一個例子:

以如下這張表為例

show privileges 命令可以查看全部許可權

查詢時從user->db->table_pirv->columns_pirv依次驗證,如果通過則執行查詢。

本課程涉及建表SQL

場景1:歌單按時間排序

場景2:統計雲音樂創建歌單的用戶

場景3-1:統計雲音樂創建歌單的用戶列表和每人創建歌單的數量。

場景3-2:統計雲音樂創建歌單的用戶列表和每人創建歌單的數量,並且只顯示歌單數量排序大於等於2的用戶

SQL進階語法-like

場景4:查詢一個月內創建歌單(從第6行開始顯示10條記錄)

場景5:對於未錄入歌曲的歌單(trackcount = null),輸出結果時歌曲數返回0.

連接的作用是用一個SQL語句把多個表中相互關聯的數據查出來

場景6:查詢收藏「老男孩」歌單的用戶列表

子查詢:內層查詢的結果作為外層的比較條件。一般子查詢都可以轉換成連接,推薦使用連接。

場景7:查詢出沒有用戶收藏的歌單

場景8:老闆想看創建和收藏歌單的所有用戶,查詢play_list和play_fav兩表中所有的userid

實例還是上節中的那些表

場景1:查詢每張專輯總的點播次數和每首歌的平均點播次數。

場景2:查詢全部歌曲中的最大的播放次數和最小的播放次數。

場景2續:查詢播放次數最多的歌曲

count(*) 和 count(1) 基本一樣,沒有明顯的性能差異。
count(*) 和 count(song_name) 差別在於 count(song_name) 會除去song_name is null的情況

場景3:顯示每張專輯的歌曲列表

實例:查詢一個月內userid為1,3,5的用戶創建的歌單

學生表:

用於更正成績的觸發器:

3. mysql如何變更資料庫實例名

常見的主要有三種方法:

  • 如果所有表都是MyISAM類型的話,可以直接修改文件夾的名字。關閉mysql→把data目錄中的db_name目錄重命名為new_db_name→開啟mysql

  • 新建資料庫,在新的資料庫里重命名所有舊資料庫中的表,再刪除舊的資料庫。具體操作命令如下:創建新的資料庫→重命名數據表名稱→刪除舊的資料庫。

    CREATE DATABASE new_db_name;RENAME TABLE db_name.table1 TO new_db_name.table1,db_name.table2 TO new_db_name.table2;DROP DATABASE db_name;

  • 利用mysqlmp命令從舊的數據導出數據,再導入新資料庫。具體操作命令如下:導出數據→創建新的資料庫→導入數據→刪除舊的資料庫。

    mysqlmp -u root -p -h ip db_name > db_name_mp.SQLmysql -u root -p -h ip -e 「CREATE DATABASE new_db_name」mysql -u root -p -h ip new_db_name < db_name_mp.SQLmysql -u root -p -h ip -e 「DROP DATABASE db_name」

4. mysql資料庫實例名怎麼查看

使用show databases;就能列出你有許可權操作的資料庫名,如果你只有一個資料庫許可權,那麼列出來的就是你當前的資料庫名。

5. MYSQL使用簡述


一、老基連接MYSQL。
格式: mysql -h主機地址 -u用戶名 -p用戶密碼
1、例1:連接到本機上的MYSQL。
首先在打開DOS窗口,然後進入目錄 mysqlbin,再鍵入命令mysql -uroot -p,回車後提示你輸密碼,如果剛安裝好MYSQL,超級用戶root是沒有密碼的,故直接回車即可進入到MYSQL中了,MYSQL的提示符是:mysql
2、例2:連接到遠程主機上的MYSQL。假設遠程主機的IP為:110.110.110.110,用戶名為root,密碼為abcd123。則鍵入以下命令:
mysql -h110.110.110.110 -uroot -pabcd123
(注:u與root可以不用加空格,其它也一樣)
3、退出MYSQL命令: exit (回車)
二、修改密碼
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼
1、例1:給root加個密碼ab12。首先在DOS下進入目錄mysqlbin,然後鍵入以下命令
mysqladmin -uroot -password ab12
註:因為開始時root沒有密碼,所以-p舊密碼一項就可以省略了。
2、例2:再將root的密碼改為djg345。
mysqladmin -uroot -pab12 password djg345
三、增加新用戶
(注意:和上面不同,下面的因為是MYSQL環境中的命令,所以後面都帶一個分號作為命令結束符)
格式:grant select on 資料庫.* to 用戶名@登錄主機 identified by "密碼"
例1、增加一個用戶test1密碼為abc,讓他可以在任何主機上登錄,並對所有資料庫有查詢、插入、修改、刪除的許可權。首先用以root用戶連入MYSQL,然後鍵入以下命令:
grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
但例1增加的用戶是十分危險的,你想如某個人知道test1的密碼,那麼他就可以在internet上的任何一台電腦上登錄你的mysql資料庫並對你的數據可以為所欲為了,解決辦法見例2。
例2、增加一個用戶test2密碼為abc,讓他只可以在localhost上登錄,並可以對資料庫mydb進行查詢、插入、修改、刪除的操作(localhost指本地主機,即MYSQL資料庫所在的那台主機),這樣用戶即使用知道test2的密碼,他也無法從internet上直接訪問資料庫,只能通過MYSQL主機上的web頁來訪問了。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
如果你不想test2有密碼,可以再打一個命令將密碼消掉。
grant select,insert,update,delete on mydb.* to test2@localhost identified by "";
注意:你必須首先登錄到MYSQL中,以下操作都是在MYSQL的提示符下進行的,而且每個命令以分號結束。
四、操作技巧
1、如果你打命令時,回車後發現忘記加分號,你無須重打一遍命令,只要打個分號回車就可以了。也就是說你可以把一個完整的命令分成幾行來打,完後用分號作結束標志就OK。
2、你可以使用游標上下鍵調出以前的命令。但以前我用過的一個MYSQL舊版本不支持。我現在用的是mysql-3.23.27-beta-win。
五、顯示命令
1、顯示資料庫列表。
show databases;
剛開始時才兩個資料庫:mysql和test。mysql庫很重要它裡面有MYSQL的系統信息,我們改密碼和新增用戶,實際上就是用侍胡謹這個庫進行操作。
2、顯示庫中的數據表:
use mysql; //打開庫,學過FOXBASE的一定不會陌生吧
show tables;
3、顯示數據表的結構:
describe 表名;
4、建庫:
create database 庫名;
5、建表:
use 庫名;
create table 表名 (欄位設定列表);
6、刪庫和刪表:
drop database 庫名;
drop table 表名;
7、將表中記錄清空:
delete from 表做則名;
8、顯示表中的記錄:
select * from 表名;
六、一個建庫和建表以及插入數據的實例
drop database if exists school; //如果存在SCHOOL則刪除
create database school; //建立庫SCHOOL
use school; //打開庫SCHOOL
create table teacher //建立表TEACHER
(id int(3) auto_increment not null primary key,
name char(10) not null,
address varchar(50) default '深圳',
year date); //建表結束
//以下為插入欄位
insert into teacher values('','glchengang','深圳一中',񟬨-10-10');
insert into teacher values('','jack','深圳一中',񟬧-12-23');
註:在建表中(1)將ID設為長度為3的數字欄位:int(3)並讓它每個記錄自動加一:auto_increment並不能為空:not null而且讓他成為主欄位primary key
(2)將NAME設為長度為10的字元欄位
(3)將ADDRESS設為長度50的字元欄位,而且預設值為深圳。varchar和char有什麼區別呢,只有等以後的文章再說了。
(4)將YEAR設為日期欄位。
如果你在mysql提示符鍵入上面的命令也可以,但不方便調試。你可以將以上命令原樣寫入一個文本文件中假設為school.sql,然後復制到c:下,並在DOS狀態進入目錄mysqlin,然後鍵入以下命令:
mysql -uroot -p密碼
c:school.sql
如果成功,空出一行無任何顯示;如有錯誤,會有提示。(以上命令已經調試,你只要將//的注釋去掉即可使用)。
七、將文本數據轉到資料庫中
1、文本數據應符合的格式:欄位數據之間用tab鍵隔開,null值用 來代替.
例:
3 rose 深圳二中 1976-10-10
4 mike 深圳一中 1975-12-23
2、數據傳入命令 load data local infile "文件名" into table 表名;
注意:你最好將文件復制到mysqlin目錄下,並且要先用use命令打表所在的庫 。
八、備份資料庫
(命令在DOS的mysqlin目錄下執行)
mysqlmp --opt schoolschool.bbb
注釋:將資料庫school備份到school.bbb文件,school.bbb是一個文本文件,文件名任取,打開看看你會有新發現。

6. 什麼是MySql資料庫

MySQL資料庫:

    MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。

    MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。

    MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。

    資料庫簡介:

    MySQL是一種開放源代碼的關系型資料庫管理系統(RDBMS),MySQL資料庫系統使用最常用的資料庫管理語言--結構化查詢語言(SQL)進行資料庫管理。

    由於MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。大多數人都認為在不需要事務化處理的情況下,MySQL是管理內容最好的選擇。

    MySQL這個名字,起源不是很明確。一個比較有影響的說法是,基本指南和大量的庫和工具帶有前綴「my」已經有10年以上,而且不管怎樣,MySQL AB創始人之一的Monty Widenius的女兒也叫My。這兩個到底是哪一個給出了MySQL這個名字至今依然是個迷,包括開發者在內也不知道。

    MySQL的海豚標志的名字叫「sakila」,它是由MySQL AB的創始人從用戶在「海豚命名」的競賽中建議的大量的名字表中選出的。獲勝的名字是由來自非洲史瓦濟蘭的開源軟體開發者Ambrose Twebaze提供。根據Ambrose所說,Sakila來自一種叫SiSwati的史瓦濟蘭方言,也是在Ambrose的家鄉烏干達附近的坦尚尼亞的Arusha的一個小鎮的名字。

    MySQL,雖然功能未必很強大,但因為它的開源、廣泛傳播,導致很多人都了解到這個資料庫。它的歷史也富有傳奇性。

    MySQL資料庫歷史:

    MySQL的歷史最早可以追溯到1979年,那時Oracle也才小打小鬧,微軟的SQL Server影子都沒有。有一個人叫Monty Widenius, 為一個叫TcX的小公司打工,並用BASIC設計了一個報表工具,可以在4M主頻和16KB內存的計算機上運行。過了不久,又將此工具,使用C語言重寫,移植到Unix平台,當時,它只是一個很底層的面向報表的存儲引擎。這個工具叫做Unireg。

    可是,這個小公司資源有限,Monty天賦極高,面對資源有限的不利條件,他反而更能發揮潛能,總是力圖寫出最高效的代碼。並因此養成了習慣。與Monty同在一起的還有一些別的同事,很少有人能堅持把那些代碼持續寫到20年後,而Monty卻做到了。

    1990年,TcX的customer 中開始有人要求要為它的API提供SQL支持,當時,有人想到了直接使用商用資料庫算了,但是Monty覺得商用資料庫的速度難令人滿意。於是,他直接藉助於mSQL的代碼,將它集成到自己的存儲引擎中。但不巧的是,效果並不太好。於是, Monty雄心大起,決心自己重寫一個SQL支持。

    1996年,MySQL 1.0發布,只面向一小撥人,相當於內部發布。到了96年10月,MySQL 3.11.1發布了,呵呵,沒有2.x版本。最開始,只提供了Solaris下的二進製版本。一個月後,Linux版本出現了。

    緊接下來的兩年裡,MySQL依次移植到各個平台下。它發布時,採用的許可策略,有些與眾不同:允許免費商用,但是不能將MySQL與自己的產品綁定在一起發布。如果想一起發布,就必須使用特殊許可,意味著要花銀子。當然,商業支持也是需要花銀子的。其它的,隨用戶怎麼用都可以。這種特殊許可為MySQL帶來了一些收入,從而為它的持續發展打下了良好的基礎。(細想想,PostgreSQL曾經有幾年限入低谷,可能與它的完全免費,不受任何限制有關系)。

    MySQL3.22應該是一個標志性的版本,提供了基本的SQL支持。

    MySQL關系型資料庫於1998年1月發行第一個版本。它使用系統核心提供的多線程機制提供完全的多線程運行模式,提供了面向C、C++、Eiffel、Java、Perl、PHP、Python以及Tcl等編程語言的編程介面(APIs),支持多種欄位類型並且提供了完整的操作符支持查詢中的SELECT和WHERE操作。

    MySQL是開放源代碼的,因此任何人都可以在General Public License的許可下下載並根據個性化的需要對其進行修改。MySQL因為其速度、可靠性和適應性而備受關注。

    1999-2000年,有一家公司在瑞典成立了,叫MySQL AB (AB是瑞典語「股份公司」的意思)。 雇了幾個人,與Sleepycat合作,開發出了 Berkeley DB引擎, 因為BDB支持事務處理,所以,MySQL從此開始支持事務處理了。

    2000年4月,MySQL對舊的存儲引擎進行了整理,命名為MyISAM。同時,2001年,Heikiki Tuuri向MySQL提出建議,希望能集成他們的存儲引擎InnoDB,這個引擎同樣支持事務處理,還支持行級鎖。

    如今,遺憾的是,BDB和InnoDB好像都被Oracle收購了,為了消滅競爭對手,哪怕是開源的,都是不擇手段。

    MySQL與InnoDB的正式結合版本是4.0。

    到了MySQL5.0,2003年12月,開始有View,存儲過程之類的東東,當然,其間, bug也挺多。

    在2008年1月16號 MySQL被Sun公司收購。

    最近,MySQL的創始人Monty Widenius已經向Sun提交了辭呈。head都要走了。

    據說,被Sun收購的公司多薄命,不知道MySQL今後前途如何,希望一路走好。相信MySQL的生命力還是很長久的。

    時至今日 mysql 和 php 的結合絕對是完美.很多大型的網站也用到mysql資料庫.mysql的發展前景是非常光明的!

    MySQL常用命令:

    1:使用SHOW語句找出在伺服器上當前存在什麼資料庫:

    mysql> SHOW DATABASES;

    2:2、創建一個資料庫MYSQLDATA

    mysql> CREATE DATABASE MYSQLDATA;

    3:選擇你所創建的資料庫

    mysql> USE MYSQLDATA; (按回車鍵出現Database changed 時說明操作成功!)

    4:查看現在的資料庫中存在什麼表

    mysql> SHOW TABLES;

    5:創建一個資料庫表

    mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));

    6:顯示表的結構:

    mysql> DESCRIBE MYTABLE;

    7:往表中加入記錄

    mysql> insert into MYTABLE values (」hyq」,」M」);

    8:用文本方式將數據裝入資料庫表中(例如D:/mysql.txt)

    mysql> LOAD DATA LOCAL INFILE 「D:/mysql.txt」 INTO TABLE MYTABLE;

    9:導入.sql文件命令(例如D:/mysql.sql)

    mysql>use database;

    mysql>source d:/mysql.sql;

    10:刪除表

    mysql>drop TABLE MYTABLE;

    11:清空表

    mysql>delete from MYTABLE;

    12:更新表中數據

    mysql>update MYTABLE set sex=」f」 where name=』hyq』;

    全局管理許可權對應解釋:

    FILE: 在MySQL伺服器上讀寫文件。

    PROCESS: 顯示或殺死屬於其它用戶的服務線程。

    RELOAD: 重載訪問控製表,刷新日誌等。

    SHUTDOWN: 關閉MySQL服務。

    資料庫/數據表/數據列許可權:

    ALTER: 修改已存在的數據表(例如增加/刪除列)和索引。

    CREATE: 建立新的資料庫或數據表。

    DELETE: 刪除表的記錄。

    DROP: 刪除數據表或資料庫。

    INDEX: 建立或刪除索引。

    INSERT: 增加表的記錄。

    SELECT: 顯示/搜索表的記錄。

    UPDATE: 修改表中已存在的記錄。

    特別的許可權:

    ALL: 允許做任何事(和root一樣)。

    USAGE: 只允許登錄–其它什麼也不允許做。

    MySQL資料庫導入方法:

    MySQL資料庫的導入,有兩種方法:

    1) 先導出資料庫SQL腳本,再導入;

    2) 直接拷貝資料庫目錄和文件。

    在不同操作系統或MySQL版本情況下,直接拷貝文件的方法可能會有不兼容的情況發生。

    所以一般推薦用SQL腳本形式導入。下面分別介紹兩種方法。

    2. 方法一 SQL腳本形式

    操作步驟如下:

    2.1. 導出SQL腳本

    在原資料庫伺服器上,可以用phpMyAdmin工具,或者mysqlmp命令行,導出SQL腳本。

    2.1.1 用phpMyAdmin工具

    導出選項中,選擇導出「結構」和「數據」,不要添加「DROP DATABASE」和「DROP TABLE」選項。

    選中「另存為文件」選項,如果數據比較多,可以選中「gzipped」選項。

    將導出的SQL文件保存下來。

    2.1.2 用mysqlmp命令行

    命令格式

    mysqlmp -u 用戶名 -p 資料庫名 > 資料庫名.sql

    範例:

    mysqlmp -u root -p abc > abc.sql

    (導出資料庫abc到abc.sql文件)

    提示輸入密碼時,輸入該資料庫用戶名的密碼。

    2.2. 創建空的資料庫

    通過主控界面/控制面板,創建一個資料庫。假設資料庫名為abc,資料庫全權用戶為abc_f。

    2.3. 將SQL腳本導入執行

    同樣是兩種方法,一種用phpMyAdmin(mysql資料庫管理)工具,或者mysql命令行。

    2.3.1 用phpMyAdmin工具

    從控制面板,選擇創建的空資料庫,點「管理」,進入管理工具頁面。

    在"SQL"菜單中,瀏覽選擇剛才導出的SQL文件,點擊「執行」以上載並執行。

    注意:phpMyAdmin對上載的文件大小有限制,php本身對上載文件大小也有限制,如果原始sql文件

    比較大,可以先用gzip對它進行壓縮,對於sql文件這樣的文本文件,可獲得1:5或更高的壓縮率。

    gzip使用方法:

    # gzip xxxxx.sql

    得到

    xxxxx.sql.gz文件。

    提示輸入密碼時,輸入該資料庫用戶名的密碼。

    3 直接拷貝

    如果資料庫比較大,可以考慮用直接拷貝的方法,但不同版本和操作系統之間可能不兼容,要慎用。

    3.1 准備原始文件

    用tar打包為一個文件

    3.2 創建空資料庫

    3.3 解壓

    在臨時目錄中解壓,如:

    cd /tmp

    tar zxf mydb.tar.gz

    3.4 拷貝

    將解壓後的資料庫文件拷貝到相關目錄

    cd mydb/

    cp * /var/lib/mysql/mydb/

    對於FreeBSD:

    cp * /var/db/mysql/mydb/

    3.5 許可權設置

    將拷貝過去的文件的屬主改為mysql:mysql,許可權改為660

    chown mysql:mysql /var/lib/mysql/mydb/*

    chmod 660 /var/lib/mysql/mydb/*

    Mssql轉換mysql的方法:

    1.導表結構

    使用MySQL生成create腳本的方法。找到生成要導出的腳本,按MySQL的語法修改一下到MySQL資料庫中創建該表的列結構什麼的。

    2.導表數據

    在MSSQL端使用bcp導出文本文件:

    bcp 「Select * FROM dbname.dbo.tablename;」 queryout tablename.txt -c -Slocalhostdb2005 -Usa

    其中」"中是要導出的sql語句,-c指定使用 進行欄位分隔,使用 進行記錄分隔,-S指定資料庫伺服器及實例,-U指定用戶名,-P指定密碼.

    在MySQL端使用mysqlimport 導入文本文件到相應表中

    mysqlimport -uroot -p databasename /home/test/tablename.txt

    其中-u指定用戶名,-p指定密碼,databasename指定資料庫名稱,表名與文件名相同

    MySQL備份與恢復:

    MySQL備份恢復數據的一般步驟

    備份一個資料庫的例子:

    1、備份前讀鎖定涉及的表

    mysql>LOCK TABLES tbl1 READ,tbl1 READ,…
    如果,你在mysqlmp實用程序中使用--lock-tables選項則不必使用如上SQL語句。

    2、導出資料庫中表的結構和數據

    shell>mysqlmp --opt db_name>db_name.sql

    3、啟用新的更新日誌

    shell>mysqladmin flush-logs

    這樣可以記錄你備份後的數據改變為恢復數據准備。

    4、解除表的讀鎖

    mysql>UNLOCK TABLES;

    為了加速上述過程,你可以這樣做:

    shell> mysqlmp --lock-tables --opt db_name>db_name.sql; mysqladmin flush-logs

    但是這樣可能會有點小問題。上命令在啟用新的更新日誌前就恢復表的讀鎖,
    在更新繁忙的站點,可能有備份後的更新數據沒有記錄在新的日誌中。
    現在恢復上面備份的資料庫

    1、對涉及的表使用寫鎖

    mysql>LOCK TABLES tbl1 WRITE,tbl1 WRITE,…

    2、恢復備份的數據

    shell>mysql db_name < db_name.sql

    3、恢復更新日誌的內容

    shell>mysql --one-database db_name < hostname.nnn

    假設需要使用的日誌名字為hostname.nnn

    4、啟用新的更新日誌

    shell>mysqladmin flush-logs

    5、解除表的寫鎖

    mysql>UNLOCK TABLES;

    希望上面的例子能給你啟發,因為備份數據的手法多種多樣,你所使用的和上面所述可能大不一樣,但是對於備份和恢復中,表的鎖定、啟用新的更新日誌的時機應該是類似的,仔細考慮這個問題。

    MySQL資料庫優化:

    選擇InnoDB作為存儲引擎

    大型產品的資料庫對於可靠性和並發性的要求較高,InnoDB作為默認的MySQL存儲引擎,相對於MyISAM來說是個更佳的選擇。

    優化資料庫結構

    組織資料庫的schema、表和欄位以降低I/O的開銷,將相關項保存在一起,並提前規劃,以便隨著數據量的增長,性能可以保持較高的水平。

    設計數據表應盡量使其佔用的空間最小化,表的主鍵應盡可能短。·對於InnoDB表,主鍵所在的列在每個輔助索引條目中都是可復制的,因此如果有很多輔助索引,那麼一個短的主鍵可以節省大量空間。

    僅創建你需要改進查詢性能的索引。索引有助於檢索,但是會增加插入和更新操作的執行時間。

    InnoDB的ChangeBuffering特性

    InnoDB提供了changebuffering的配置,可減少維護輔助索引所需的磁碟I/O。大規模的資料庫可能會遇到大量的表操作和大量的I/O,以保證輔助索引保持最新。當相關頁面不在緩沖池裡面時,InnoDB的changebuffer將會更改緩存到輔助索引條目,從而避免因不能立即從磁碟讀取頁面而導致耗時的I/O操作。當頁面被載入到緩沖池時,緩沖的更改將被合並,更新的頁面之後會刷新到磁碟。這樣做可提高性能,適用於MySQL5.5及更高版本。

    InnoDB頁面壓縮

    InnoDB支持對表進行頁面級的壓縮。當寫入數據頁的時候,會有特定的壓縮演算法對其進行壓縮。壓縮後的數據會寫入磁碟,其打孔機制會釋放頁面末尾的空塊。如果壓縮失敗,數據會按原樣寫入。表和索引都會被壓縮,因為索引通常是資料庫總大小中佔比很大的一部分,壓縮可以顯著節約內存,I/O或處理時間,這樣就達到了提高性能和伸縮性的目的。它還可以減少內存和磁碟之間傳輸的數據量。MySQL5.1及更高版本支持該功能。

    注意,頁面壓縮並不能支持共享表空間中的表。共享表空間包括系統表空間、臨時表空間和常規表空間。

    使用批量數據導入

    在主鍵上使用已排序的數據源進行批量數據的導入可加快數據插入的過程。否則,可能需要在其他行之間插入行以維護排序,這會導致磁碟I/O變高,進而影響性能,增加頁的拆分。關閉自動提交的模式也是有好處的,因為它會為每個插入執行日誌刷新到磁碟。在批量插入期間臨時轉移唯一鍵和外鍵檢查也可顯著降低磁碟I/O。對於新建的表,最好的做法是在批量導入後創建外鍵/唯一鍵約束。

    一旦你的數據達到穩定的大小,或者增長的表增加了幾十或幾百兆位元組,就應該考慮使用OPTIMIZETABLE語句重新組織表並壓縮浪費的空間。對重新組織後的表進行全表掃描所需要的I/O會更少。

    優化InnoDB磁碟I/O

    增加InnoDB緩沖池大小可以讓查詢從緩沖池訪問而不是通過磁碟I/O訪問。通過調整系統變數innodb_flush_method來調整清除緩沖的指標使其達到最佳水平。

    MySQL的內存分配

    在為MySQL分配足夠的內存之前,請考慮不同領域對MySQL的內存需求。要考慮的關鍵領域是:並發連接——對於大量並發連接,排序和臨時表將需要大量內存。在撰寫本文時,對於處理3000+並發連接的資料庫,16GB到32GB的RAM是足夠的。

    內存碎片可以消耗大約10%或更多的內存。像innodb_buffer_pool_size、key_buffer_size、query_cache_size等緩存和緩沖區要消耗大約80%的已分配內存。

    日常維護

    定期檢查慢的查詢日誌並優化查詢機制以有效使用緩存來減少磁碟I/O。優化它們,以掃描最少的行數,而不是進行全表掃描。

    其他可以幫助DBA檢查和分析性能的日誌包括:錯誤日誌、常規查詢日誌、二進制日誌、DDL日誌(元數據日誌)。

    定期刷新緩存和緩沖區以降低碎片化。使用OPTIMIZETABLE語句重新組織表並壓縮任何可能被浪費的空間。

7. 雲資料庫MySQL實例是否支持root賬號

雲資料庫MySQL實例不支持root賬號脊扮祥,且不提供root許可權賬號,主要是為了減少誤操作對業務的影響。大家可櫻搏以通過雲資料庫MySQL控缺塌制台為MySQL實例的資料庫創建不同許可權的業務管理賬號。了解移動雲雲資料庫MySQL更多詳情,歡迎注冊登錄移動雲官網→
https://gwyydc.cmecloud.cn:8106/t/ECis,再不明白自己去網路下。

8. python連接MySQL資料庫實例分析

python連接MySQL資料庫實例分析
本文實例講述了python連接MySQL資料庫的方法。分享給大家供大家參考。具體實現方法如下:
import MySQLdb
conn = MySQLdb.connect(host="localhost",
user="root",
passwd="123456",
db="test")
cursor = conn.cursor()
cursor.execute("select * from hard")
res = cursor.fetchall()
for x in res:
print x
cursor.close()
conn.close()
運行結果如下:
希望本文所述對大家的python程序設計有所幫助。

9. mysql資料庫實例之間會不會有影響

mysql資料庫實例之間不會有影響。一個連接可以擁有多個會話也可以或態枯沒有會話(衫洞實際上,一條連接上的各個會話可以使閉咐用不同的用戶身份),同一個連接上的不同會話之間不會相互影響。

10. 一台mysql實例 可以創建多少mysql資料庫

本質上對創建資料庫沒有限制,可以使用實例副本進行創建。

大多情況下,需要可靠而有效地克隆 MySQL 實例數據。這包括 MySQL 高可用的解決方案,其中需要在將實例加入組復制集群之前配置實例,或者在經典復制模型中將其添加為 Slave。

為復制拓撲而創建 MySQL 副本一直很麻煩。涉及的步驟很多,首先要備份 MySQL 伺服器,通過網路將備份傳輸到我們想要添加到復制集的新 MySQL 節點,然後在該節點上恢復備份並手動啟動 MySQL 伺服器。為了高可用,最好還要將其正確設置備份的 GTID,並啟動並運行群集。涉及的手動步驟數量過多不利於高可用。CLONE 插件解決了這個問題並簡化了副本配置。使您可以使用 MySQL 客戶端(和 SQL 命令)來配置新節點並在發生時觀察克隆進度。無需手動處理多個步驟並維護自己的基礎架構來配置新的 MySQL 節點。

MySQL 8.0.17 引入了 CLONE SQL 語句,使當前的 MySQL 伺服器成為另一個運行在不同節點的 MySQL 伺服器的「克隆」。我們將執行 clone 語句的伺服器實例稱為「受體」。克隆的源伺服器實例稱為「供體」。供體克隆以一致的快照存儲在 InnoDB 存儲引擎中的所有數據和元數據,以替換受體中的數據。

成功執行 CLONE SQL 語句後,將自動重新啟動受體伺服器。重新啟動涉及恢復克隆的快照數據,就像用老方法復制數據一樣。恢復完成後,受體就是供體的克隆版,隨時可以使用!


這里有一些關於克隆過程的重要注意事項。

  • 不克隆 MySQL 配置參數,並且受體保留所有原始配置參數,如克隆之前。這樣做是因為許多配置可能特定於節點(例如 PORT),因此保留它們似乎是一個不錯的選擇。另一方面,一些存輪慧正儲配置確實需要在供體和受體之間匹配(例如 innodbpagesize),如果這樣的配置參數不匹配,CLONE 將報告碧悉錯誤。

  • CLONE 插件不會克隆二進制日誌。

  • CLONE 插件目前僅支持 InnoDB 存儲引擎。在其他存儲引擎(如 MyISAM 和 CSV)中創建的表將被克隆為空表。克隆基礎架構的設計允許克隆 MySQL 支持的任何存儲引擎。但是,只有 InnoDB 序列化和反序列化方法已經實現並經過測試。

  • 克隆會阻止供體中的所有並發 DDL。

  • 需要注意的事實是受體放棄所有數據以及任臘悔何二進制日誌,以便成為供體實例的克隆。在執行 CLONE 之前,如果認為有必要,需要備份當前受體數據。