# 1. 業務是什麼? 產品的功能 用戶的行爲(熱功能,熱數據)java
# 2.大家公司用什麼版本數據庫? 5.6.38 5.7.20mysql
#3. 大家公司怎麼還在用這麼低的版本? 咱們這個業務已經運行了4年了,一直用的5.6版本,很是穩定,因此說暫時沒有打算升級。面試
# 4. GA時間問題漏洞怎麼說? 答:剛去上家公司不到兩年,交接的時候已經運行了2年多了,我接手的時候版本已是5.6.38 ,應當是作太小版本的升級。算法
# 5. 咱們如今公司用的是5.7,你能勝任嗎? 能。雖然咱們生產中一直使用的5.6,可是我對5.7,8.0的新特性已經足夠了解了。因此我徹底可以勝任股公司的工做sql
# 6. 報錯?數據庫
[root@db01 bin]# /data/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/mysql
--datadir=/data/mysql/data /data/mysql/bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory [root@db01 bin]# [root@db01 ~]# yum install -y libaio-devel
# 7.關於初始化的新特性(5.6 和 5.7 ) 5.6 版本的初始化程序: /data/mysql/scripts/mysql_install_db --user=mysql --basedir=/data/mysql --datadir=/data/mysql/datawindows
初始化完成後:無密碼和無安全策略的 5.7 版本的初始化程序:安全
(1) /data/mysql/bin/mysqld --initialize --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data (2) /data/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/data/mysql --datadir=/data/mysql/data
提示:5.7之後初始化命令變爲bin/mysqld命令,提供了兩種初始化方式 第一種初始化方式:開啓臨時密碼和安全策略 第二種初始化方式和以前版本同樣,是無密碼無安全策略。 演示: 2019-04-03T03:40:15.595883Z 1 [Note] A temporary password is generated for root@localhost: **MWht)!4%sa,3** 安全策略? 密碼的複雜度進行了要求,對於密碼的過時時間設置了限制bash
# 8. 啓動報錯 服務器
思路是看日誌,日誌行中[ERROR]的
以上問題是:已經啓動了,在此啓動會說文件佔用
沒啓動,帳號密碼錯誤,IP 、port 、 socket,分配不了鏈接線程
關係型數據庫中(MySQL,Oracle,MSSQL,DB2,PG):SQL語句的標準
[root@db01 ~]# mysql -uroot -p -S /tmp/mysql.sock -h 10.0.0.51 -P3306 Enter password: mysql> show processlist; +----+------+------------+------+---------+------+----------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +----+------+------------+------+---------+------+----------+------------------+ | 15 | root | localhost | NULL | Sleep | 25 | | NULL | | 16 | root | db01:39646 | NULL | Query | 0 | starting | show processlist | +----+------+------------+------+---------+------+----------+------------------+ 2 rows in set (0.00 sec)
1. 掛維護頁
2. 關數據庫
[root@db01 ~]# systemctl stop mysqld
3. 跳過受權啓動
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking & --skip-grant-tables : 鏈接層關閉驗證模塊,全部驗證表不加載。 --skip-networking :鏈接層關閉TCP/IP協議,禁止遠程訪問。
4. 改密碼
mysql> alter user root@'localhost' identified by '456'; ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement mysql> mysql> mysql> mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> alter user root@'localhost' identified by '456'; Query OK, 0 rows affected (0.00 sec) mysql> [root@db01 ~]# pkill mysqld [root@db01 ~]# systemctl start mysqld
5.正常開啓業務
命令行>配置文件>預編譯
prompt=Master [\\d]>
1.先看日誌
2. 配置文件
3. 數據
4. 終極大招 mysqld --defaults-file=xxxx --user=mysql &
char(11) :***定長***的字符串類型,在存儲字符串時,最大字符長度11個,當即分配11個字符長度的存儲空間,若是存不滿,***空格***填充。
varchar(11):***變******長***的字符串類型看,最大字符長度11個。在存儲字符串時,自動判斷字符長度,***按需***分配存儲空間。
優缺點:
1. char類型存儲時,相比varchar類型存儲效率更高,不須要判斷字符長度,直接分配磁盤空間
2.varchar類型,相比char類型,按需分配空間。
選擇?
1. 從原則上來說,未來字符串長度不固定的話,選擇varchar類型,字符串長度固定不變則選擇char類型
2. 實際上咱們生產中在考慮性能問題的方面,須要有大量插入(insert)操做的應用中,咱們能夠考慮使用char去代替varchar。
3. 若是咱們業務中,大量是查詢類操做的應用中,數據量級又比較大狀況下,變長長度數據類型,能夠考慮採用varchar,一方面節省空間,能夠有效的減小***索引樹***的高度,從而提升索引的優化查詢的效果。
開發環境一般是windows的,不區分大小寫,線上環境一般是Linux,區分大小寫的。
1. 和開發混到好,直接找他要ER圖
2. 誰也不認識:
use xuexiao show tables; desc xuesheng; show create table xuesheng; select * from xuesheng where id <5 create table ceshi like xuesheng; (複製結構同樣的空表)
union 和 union all區別
union 對結果集進行去重複,union all 不去重複
在5.7 中,sql_mode使用的是嚴格模式
sql_mode=only_full_group_by
參數的意思是:
在select 後的查詢列,必須是在group by出現過的列,或者使用函數括起來的。
不然group by語句會報錯
image
葉子節點中,會存儲相鄰葉子結點的指針,能夠很大程度優化範圍查詢(> < >= <=)
變長長度字符串,使用char類型,在數據量級很大的時候,使用此列建索引高度變高
爲何表設計時設置爲非空?
針對輔助索引,若是出現大量空值,會致使索引失效
1. 若是是where條件後有多列等值查詢,那麼只須要將這多列進行聯合索引便可(= and or in)
可是,咱們建索引是儘可能將惟一值多的列放在前面,儘可能知足優化器的算法規則
2.若是是 where A group by B order by C,必須按照語句的執行順序創建聯合索引
select e.emp_id,e.emp_name,count(c.course_id) from e join c on e.emp_id=c.emp_id where e.dept_name='技術部'; select e.dept,t.course,count(emp_id) from e join c on e.emp_id=c.emp_id join t on c.course_id=t.course_id where c.score>=60
select e.emp_id,e.emp_name , case c.score when c.score< 60 then '不及格' when c.score >=60 and c.scoe <70 then '及格' when score >=70 and c.scoe <85 then '良好' when score >=85 then '優秀' END as '評級' from e join c on e.emp_id=c.emp_id join t on c.course_id=t.corse_id where t.tea_name='張三'
select e.detp_name ,e.emp_name,t.course_name,count(c.score) from e join c on e.emp_id=c.emp_id join t on c.course_id=t.course_id where count(c.score)>0 order by t.course_name, c.score desc limit 3
select e.emp_name,t.course_name ,avg(c.score) from e join c on e.emp_id=c.emp_id join t on c.course_id=t.course_id where t.course_name in (‘數據庫’,'java') group by e.emp_name having count(t.course_name)>1
1.數據庫沒有啓動
2.socket文件位置不對
物理損壞
邏輯損壞
1、得到表結構
# sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `city`/!d;q' full.sql>createtable.sql
2、得到INSERT INTO 語句,用於數據的恢復
# grep -i 'INSERT INTO `city`' full.sqll >data.sql &
3.獲取單庫的備份
# sed -n '/^-- Current Database: `world`/,/^-- Current Database: `/p' all.sql >world.sql
1. 聯合索引: idx(status , signal)
2. 查詢條件調整 where status and signal
數據和類型 ,not null ,註釋
SQL語句是數據DDL操做,是屬於列的添加操做
直接執行時會產生表鎖,對業務的影響較大,數據量大,業務量大時,對於業務影響較大。
因此咱們推薦使用 pt-osc 工具來進行online DDL,減小對業務的影響
A->B架構轉換
1. 主庫寫壓力大,能夠經過多級主從減輕主庫的壓力
B-》A架構轉換
2.業務讀多寫少,經過多從庫實現讀寫分離和讀的負載均衡,另外能夠配合MHA等架構進行高可用
innodb_max_undo_log_size = 128M innodb_undo_log_truncate = ON innodb_undo_logs = 128 innodb_undo_tablespaces = 3 innodb_purge_rseg_truncate_frequency = 10
mysqldump -uroot -p -d test -S /tmp/mysql.sock | sed 's/AUTO_INCREMENT=[0-9]*\s*//g' > test.sql
[root@mycat1 ~]# mysql_ssl_rsa_setup [root@mycat1 ~]# ll /data/mysql/*.pem -rw------- 1 root root 1675 Jun 10 16:00 /data/mysql/ca-key.pem -rw-r--r-- 1 root root 1107 Jun 10 16:00 /data/mysql/ca.pem -rw-r--r-- 1 root root 1107 Jun 10 16:00 /data/mysql/client-cert.pem -rw------- 1 root root 1675 Jun 10 16:00 /data/mysql/client-key.pem -rw------- 1 root root 1679 Jun 10 16:00 /data/mysql/private_key.pem -rw-r--r-- 1 root root 451 Jun 10 16:00 /data/mysql/public_key.pem -rw-r--r-- 1 root root 1107 Jun 10 16:00 /data/mysql/server-cert.pem -rw------- 1 root root 1675 Jun 10 16:00 /data/mysql/server-key.pem
ca-key.pem #CA私鑰 ca.pem #自籤的CA證書,客戶端鏈接也須要提供 client-cert.pem #客戶端鏈接服務器端須要提供的證書文件 client-key.pem #客戶端鏈接服務器端須要提供的私鑰文件 private_key.pem #私鑰/公鑰對的私有成員 public_key.pem #私鑰/公鑰對的共有成員 server-cert.pem #服務器端證書文件 server-key.pem #服務器端私鑰文件
1. InnoDB存儲引擎的表索引單一字段或前綴長度,最長是767字節(bytes)。
存中文時,utf8字符集,那麼767/3=255,
若是是utf8mb4應當是,767/4=191.
2. 字符串長度值視實際數據長度,需佔用 1 或 2 個字節存儲。
當實際數據長度 <= 255 時,varchar字段長度 = 1 + N
當實際數據長度 > 255 時,varchar字段長度 = 2 + N
總結:實際上是不少開發人員的一些習慣吧,可是每每不知道緣由。因此呢帶你們普及一下。