/etc/init.d/mysqld start
service mysqld start
systemctl start mysqld
複製代碼
lsof -i :3306
netstat -lntup |grep 3306
複製代碼
設置密碼前端
mysql -uroot -ppassword -e "set passowrd for root = passowrd('passowrd')"
mysqladmin -uroot passowrd "NEWPASSWORD"
複製代碼
更改密碼mysql
mysqladmin -uroot passowrd oldpassowrd "NEWPASSWORD"
use mysql;
update user set passowrd = PASSWORD('newpassword') where user = 'root';flush privileges;
複製代碼
msyql 5.7以上版本修改默認密碼命令面試
alter user 'root'@'localhost' identified by 'root'
複製代碼
mysql -uroot -ppassword
複製代碼
show create database DB_NAME;
複製代碼
mysql -V
mysql -uroot -ppassowrd -e "use mysql;select version();"
複製代碼
select user();
複製代碼
create database mingongge DEFAULT CHARSET GBK COLLATE gbk_chinese_ci;
複製代碼
grant all on mingongge.* to 'mingongge'@'localhost' identified by 'mingongge';
複製代碼
show grants for mingongge@localhost
複製代碼
select user from mysql.user;
複製代碼
use mingongge
複製代碼
create table test (
id int(4),
name varchar(16)
)ENGINE=innodb DEFAULT CHARSET=gbk;
複製代碼
desc test;
show create table test\G
複製代碼
insert into test values('1','mingongge');
複製代碼
insert into test values('2','民工哥'),('3','mingonggeedu');
複製代碼
select * from test where name = 'mingongge';
複製代碼
update test set name = 'mgg' where id = '1';
複製代碼
alter table test add age tinyint(2) after id;
複製代碼
system mysqldump -uroot -pMgg123.0. -B mingongge >/root/mingongge_bak.sql
複製代碼
delete from test;
select * from test;
複製代碼
drop table test;
show tables;
drop database mingongge;
show databases;
複製代碼
system mysql -uroot -pMgg123.0. </root/mingongge_bak.sql
複製代碼
alter database mingongge default character set utf8;
alter table test default character set utf8;
複製代碼
alter table test add primary key(id);
create index mggindex on test(name(16));
複製代碼
alter table test add shouji char(11);
#默認就是在最後一列後面插入新增列
複製代碼
insert into test values('4','23','li','13700000001'),('5','26','zhao','13710000001');
複製代碼
create index SJ on test(shouji(8));
複製代碼
show index from test;
show create table test\G
#下面的命令也能夠查看索引類型
show keys from test\G
複製代碼
drop index SJ on test;
drop index mggindex on test;
複製代碼
create index lianhe on test(name(6),shouji(8));
複製代碼
select * from test where shouji like '137%' and name = 'zhao';
複製代碼
explain select * from test where name = 'zhao' and shouji like '137%'\G
複製代碼
alter table test engine=MyISAM;
複製代碼
revoke select on mingongge.* from mingongge@localhost;
複製代碼
drop user migongge@localhost;
複製代碼
drop database mingongge
複製代碼
mysqladmin -uroot -pMgg123.0. shutdown
lsof -i :3306
複製代碼
mysqld_safe --skip-grant-tables & #啓動數據庫服務
mysql -uroot -ppassowrd -e "use mysql;update user set passowrd = PASSWORD('newpassword') where user = 'root';flush privileges;"
複製代碼
關係型數據庫模型是把複雜的數據結構歸結爲簡單的二元關係,對數據的操做都是創建一個或多個關係表格上,最大的特色就是二維的表格,經過SQL結構查詢語句存取數據,保持數據一致性方面很強大redis
一、mysql 互聯網企業經常使用 二、oracle 大型傳統企業應用軟件 三、 如數據備份、複雜鏈接查詢、一致性數據存儲等,仍是使用MySQL或者其餘傳統的關係型數據庫最合適sql
非關係型數據庫也被稱爲NoSQL數據庫,數據存儲不需有特有固定的表結構 特色:高性能、高併發、簡單易安裝mongodb
一、memcaced 純內存 二、redis 持久化緩存 三、mongodb 面向文檔 若是須要短期響應的查詢操做,沒有良好模式定義的數據存儲,或者模式更改頻繁的數據存儲仍是用NoSQL數據庫
sql語句分類以下 DDL 數據定義語言,用來定義數據庫對象:庫、表、列 表明性關鍵字:create alter drop DML 數據操做語言,用來定義數據庫記錄 表明性關鍵字:insert delete update DCL 數據控制語言,用來定義訪問權限和安全級別 表明性關鍵字:grant deny revoke DQL 數據查詢語言,用來查詢記錄數據 表明性關鍵字:select緩存
char長度是固定不可變的,varchar長度是可變的(在設定內)好比一樣寫入cn字符,char類型對應的長度是4(cn+兩個空格),但varchar類型對應長度是2安全
create database mingongge default character utf8 collate utf8_general_ci;
複製代碼
grant all on *.* to mingongge@'172.16.1.0/24' identified by '123456';
複製代碼
mysql多實例就是在同一臺服務器上啓用多個mysql服務,它們監聽不一樣的端口,運行多個服務進程,它們相互獨立,互不影響的對外提供服務,便於節約服務器資源與後期架構擴展 多實例的配置方法有兩種: 一、一個實例一個配置文件,不一樣端口 二、同一配置文件(my.cnf)下配置不一樣實例,基於mysqld_multi工具bash
一、刪除數據庫不使用的默認用戶 二、配置相應的權限(包括遠程鏈接) 三、不可在命令行界面下輸入數據庫的密碼 四、按期修改密碼與增強密碼的複雜度
參考前面的回答
前者刪除數據能夠恢復,它是逐條刪除速度慢 後者是物理刪除,不可恢復,它是總體刪除速度快
一、能夠殺掉sleep進程,kill PID 二、修改配置,重啓服務
[mysqld]
wait_timeout = 600
interactive_timeout=30
#若是生產服務器不可隨便重啓可使用下面的方法解決
set global wait_timeout=600
set global interactive_timeout=30;
複製代碼
在每一個connection(session)第一次鏈接時須要使用到,來提訪問性能
set global sort_buffer_size = 2M
複製代碼
MySQL中的binlog日誌記錄了數據中的數據變更,便於對數據的基於時間點和基於位置的恢復 但日誌文件的大小會愈來愈大,點用大量的磁盤空間,所以須要定時清理一部分日誌信息 手工刪除:
首先查看主從庫正在使用的binlog文件名稱 show master(slave) status\G 刪除以前必定要備份 purge master logs before'2017-09-01 00:00:00'; #刪除指定時間前的日誌 purge master logs to'mysql-bin.000001'; #刪除指定的日誌文件 自動刪除: 經過設置binlog的過時時間讓系統自動刪除日誌 show variables like 'expire_logs_days'; et global expire_logs_days = 30; #查看過時時間與設置過時時間
1.Row(行模式); 日誌中會記錄成每一行數據被修改的形式,而後在slave端再對相同的數據進行修改 2.Statement(語句模式) 每一條修改的數據都會完整的記錄到主庫master的binlog裏面,在slave上完整執行在master執行的sql語句 3.mixed(混合模式) 結合前面的兩種模式,若是在工做中有使用函數 或者觸發器等特殊功能需求的時候,使用混合模式 數據量達到比較高時候,它就會選擇 statement模式,而不會選擇Row Level行模式
一、中止主從複製,在主庫上執行鎖表並刷新binlog操做,接着恢復以前的全備文件(好比0點的全備) 二、將0點時的binlog文件與全備到故障期間的binlog文件合併導出成sql語句 mysqlbinlog --no-defaults mysql-bin.000011 mysql-bin.000012 >bin.sql 三、將導出的sql語句中drop語句刪除,恢復到數據庫中 mysql -uroot -pmysql123 < bin.sql
-A 此參數做用是備份全部數據庫(至關於--all-databases) -B databasename 備份指定數據(單庫備份使用)
主從複製的原理以下: 主庫開啓binlog功能並受權從庫鏈接主庫,從庫經過change master獲得主庫的相關同步信息,而後鏈接主庫進行驗證,主庫IO線程根據從庫slave線程的請求,從master.info開始記錄的位置點向下開始取信息,同時把取到的位置點和最新的位置與binlog信息一同發給從庫IO線程,從庫將相關的sql語句存放在relay-log裏面,最終從庫的sql線程將relay-log裏的sql語句應用到從庫上,至此整個同步過程完成,以後將是無限重複上述過程 完整步驟以下:
一、主庫開啓binlog功能,並進行全備,將全備文件推送到從庫服務器上 二、show master status\G 記錄下當前的位置信息及二進制文件名 三、登錄從庫恢復全備文件 四、執行change master to 語句 五、執行start slave and show slave status\G
修改配置文件加上下面的配置
log_bin=slave-bin
log_bin_index=slave-bin.index
複製代碼
須要重啓服務生效
雙向同步主要應用於解決單一主庫寫的壓力,具體配置以下 主庫配置
[mysqld]
auto_increment_increment = 2 #起始ID
auto_increment_offset = 1 #ID自增間隔
log-slave-updates
複製代碼
從庫配置
[mysqld]
auto_increment_increment = 2 #起始ID
auto_increment_offset = 2 #ID自增間隔
log-slave-updates
複製代碼
主從庫服務器都須要重啓mysql服務
級聯同步主要應用在從庫須要作爲其它數據庫的主庫 在須要作級聯同步的數據庫配置文件增長下面的配置便可
log_bin=slave-bin
log_bin_index=slave-bin.index
複製代碼
登錄從庫
一、執行stop slave;中止主從同步 二、而後set global sql_slave_skip_counter = 1;跳過一步錯誤 三、最後執行 start slave;並查看主從同步狀態
須要從新進行主從同步操做步驟以下 進入主庫
一、進行全備數據庫並刷新binlog,查看主庫此的狀態 二、恢復全備文件到從庫,而後執行change master 三、開啓主從同步start slave;並查看主從同步狀態
mysql -uroot -ppassowrd -e "show slave status\G" |grep -E "Slave_IO_Running|Slave_SQL_Running"|awk '{print $2}'|grep -c Yes
經過判斷Yes的個數來監控主從複製狀態,正常狀況等於2
複製代碼
一、經過開發程序實現 二、經過其它工具實現(如mysql-mmm)
一、執行stop slave 或者中止服務 二、修復好從庫數據庫 三、而後從新操做主庫同步
一、登錄各個從庫中止同步,並查看誰的數據最新,將它設置爲新主庫讓其它從庫同步其數據 二、修復好主庫以後,生新操做主從同步的步驟就能夠了
#須要注意的新的主庫若是以前是隻讀,須要關閉此功能讓其可寫
#須要在新從庫建立與以前主庫相同的同步的用戶與權限
#其它從庫執行change master to master_port=新主庫的端口,start slave
複製代碼
一、開發使用root用戶在從庫上寫入數據形成主從數據不一致,而且前端沒有展現須要修改的內容(仍舊是老數據) 二、內網測試環境服務器忽然斷電形成主從同步故障
一、須要同步的從庫數據太多 二、從庫的硬件資源較差,須要提高 三、網絡問題,須要提高網絡帶寬 四、主庫的數據寫入量較大,須要優配置和硬件資源 五、sql語句執行過長致使,須要優化
一、雙主多從,主從同步的架構,而後實行某個從庫專業作爲備份服務器 二、編寫腳本實行分庫分表進行備份,並加入定時任務 三、最終將備份服務推送至內網專業服務器,數據庫服務器本地保留一週 四、備份服務器根據實際狀況來保留備份數據(通常30天)
數據庫事務是指邏輯上的一組sql語句,組成這組操做的各個語句,執行時要麼成功,要麼失敗 特色:具備原子性、隔離性、持久性、一致性
全備:數據庫全部數據的一次完整備份,也就是備份當前數據庫的全部數據 增備:就在上次備份的基礎上備份到如今全部新增的數據 冷備:中止服務的基礎上進行備份操做 熱備:實行在線進行備份操做,不影響數據庫的正常運行 全備在企業中基本上是每週或天一次,其它時間是進行增量備份 熱備使用的狀況是有兩臺數據庫在同時提供服務的狀況,針對歸檔模式的數據庫 冷備使用狀況有企業初期,數據量不大且服務器數量很少,可能會執行某些庫、表結構等重大操做時
創建主鍵與增長索引
一、集羣架構可採用雙主多從的模式,但實際雙主只有一主在線提供服務,兩臺主之間作互備 二、另外的從可作讀的負載均衡,而後將其中一臺抽出專業作備份
一、須要注意語句是否有格式上的錯誤,執行會出錯致使過程當中斷 二、還須要注意語句的執行時間是否過長,是否會對服務器負載產生壓力影響實際生產
一、首先導出庫的表結構 -d 只導出表結構,而後批量替換 二、導出庫中的全部數據(在不產生新數據的前提下) 三、而後全局替換set names = xxxxx 四、刪除原有庫與表,並新建立出來,再導入建庫與建表語句與全部數據
服務器系統、數據庫、客戶端三方字符集不一致致使,須要統一字符
一、提高服務器硬件資源與網絡帶寬 二、優化mysql服務配置文件 三、開啓慢查詢日誌而後分析問題所在
高可用方案有
一、主從架構 二、MySQL+MMM 三、MySQL+MHA 四、mysql+haproxy+drbd 五、mysql+proxy+amoeba
經過mysqldump命令備份出一個sql文件,再使用sed命令替換 或者執行下面的腳本進行修改
#!/bin/sh
user=root
passwd=123456
cmd="mysql -u$user -p$passwd "
dump="mysqldump -u$user -p$passwd"
for database in `$cmd -e "show databases;"|sed '1,2d'|egrep -v "mysql|performance_schema"`
do
for tables in `dump -e "show tables from $databses;"|sed '1d'`
do
$cmd "alter table $database.$tables engine = MyISAm;"
done
done
複製代碼
經過mysqldump命令備份出一個sql文件,再使用sed命令替換sed -i 's/GBK/UTF8/g'
一、可使用top free 等命令分析系統性能等方面的問題 二、如是由於數據庫的緣由形成的,就須要查看慢查詢日誌去查找並分析問題所在