Mysql DBA 高級運維學習筆記-Mysql常用基礎命令實戰
(1)常規方法啟動數據庫
1.啟動mysql服務命令
[root@localhost ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!
2.查看mysql端口
[root@localhost ~]# ss -lnt|grep 3306
LISTEN 0 50*:3306 *:*
3.查看mysql進程
會啟動兩個進程第一個就是mysql_safe第二個是mysqld
[root@localhost ~]# ps -ef|grep mysql|grep -v grep root 2796 1 0 16:23 pts/000:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/var --pid-file=/usr/local/mysql/var/localhost.localdomain.pid mysql 2912 2796 0 16:23 pts/000:00:00 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/var --user=mysql --log-error=/usr/local/mysql/var/localhost.localdomain.err --pid-file=/usr/local/mysql/var/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306
4.MySQL數據庫啟動原理
/etc/init.d/mysqld 是一個shell啟動腳本,啟動後最終會調用mysqld_safe腳本,最後調用mysqld服務啟動mysql。
如下,/etc/init.d/mysqld腳本中調用的mysqld_safe的程序。
$bindir/mysqld_safe --datadir=$datadir --pid-file=$server_pid_file $other_args >/dev/null 2>&1 &
(2)初始化數據庫時MySQL系統輸出的給出的啟動方法
Mysqld_safe --user=mysql &
提示:
1.當找回root密碼時,會經常使用mysqld_safe –user=mysql &帶參數啟動
2.我們自己開發數據庫啟動腳本時,會用到這個方法。
3./etc/init.d/mysqld和mysqld_safe --user=mysql的啟動實質一樣。一般出故障的時候我們用mysqld_safe來啟動,因為可以加參數。
[root@localhost ~]# cd /usr/local/mysql/|mysqld_safe &
(3)常規方法關閉數據庫
1.關閉MySQL命令
[root@localhost ~]# /etc/init.d/mysqld stop Shutting down MySQL. SUCCESS! [root@localhost ~]# ss -lnt|grep 3306
2.MySQL常規關閉數據庫原理
‘stop‘)
# Stop daemon. We use a signal here to avoid having to know the
# root password.
# The RedHat / SuSE lock directory to remove
lock_dir=/var/lock/subsys/mysqlmanager
# If the manager pid_file doesn‘t exist, try the server‘s
if test ! -s "$pid_file"
then
pid_file=$server_pid_file
lock_dir=/var/lock/subsys/mysql
fi
if test -s "$pid_file"
then
mysqlmanager_pid=`cat $pid_file`
if (kill -0 $mysqlmanager_pid 2>/dev/null)
then
echo $echo_n "Shutting down MySQL"
kill $mysqlmanager_pid
# mysqlmanager should remove the pid_file when it exits, so wait for it.
wait_for_pid removed "$mysqlmanager_pid"; return_value=$?
else
log_failure_msg "MySQL manager or server process #$mysqlmanager_pid is not running!"
rm $pid_file
fi
(4)強制關閉mysql
Killall mysqld
Pkill mysqld
Killall -9 mysqld
Kill pid
提示:第二種方法啟動和關閉數據庫一般生產環境不用,特別是關閉命令。
強調:盡量不要野蠻殺死mysql服務,生產高並發環境可能會引起數據丟失。
下面引用老男孩老師的博文,野蠻殺死數據庫導致的故障企業案例:
http://oldboy.blog.51cto.com/2561410/1431161
http://oldboy.blog.51cto.com/2561410/1431172
http://www.cnblogs.com/peida/archive/2012/12/20/2825837.html
(5) 優雅關閉數據庫方法
第一種mysqladmin方法
[root@localhost ~]# mysqladmin -uroot -p123456 shutdown
第二種方法自帶的腳本
/etc/init.d/mysqld stop
7.1.1多實例mysql啟動與關閉方法實例
啟動:
/data/3306/mysql start
/data/3307/mysql start
關閉:
/data/3306/mysql stop
/data/3306/mysql stop
多實例啟動腳本實現啟動和關閉方法
啟動:
${cmdPath}/mysqld_safe --defaults-file=${myPath}/my.cnf --user=mysql --basedir=${softPath} --datadir=${myPath}/data &>/dev/null &
關閉:
mysqladmin -u"${my_user}" -p"${my_pass}" -S "$socketfile" shutdown
7.2 登錄mysql方法
7.2.1單實例mysql登錄
① Mysql 剛裝完數據庫無需密碼登錄,不要密碼。
② Mysql –uroot 剛裝完數據庫無需密碼登錄,不要密碼。
③ Mysql –uroot –p 這是標準的命令行登錄命令。
④ Mysql –uroot –p’123456’ 非腳本一般不這樣用,密碼明文會泄露密碼可以掩飾history功能解決。
解決方法:
History –c清空歷史記錄
History –d 刪除指定行
可以查看系統歷史記錄,可以刪除
[root@mysql 3306]# cat /root/.bash_history
也可以查看mysql歷史記錄,可以刪除
[root@mysql 3306]# cat /root/.mysql_history
登錄後默認提示符是mysql>這個提示符可以修改,目的是為了區分測試環境和正式環境。工作中一定要先區分正式環境和測試環境。不管正式環境還是測試環境都要先備份在操作。
更改mysql數據登錄提示符(了解的知識)方法如下:
1.命令行修改提示符
mysql> prompt \u@zhengshi \r:\m\s-> 這種改變是臨時的不生效的
2.配置文件修改提示符
在my.cnf配置文件中的[mysql]模塊下添加如下內容,保存後,無需重啟mysql,退出當前session重新登錄即可,如果在配置文件中添加,可以用\避免轉義帶來的問題。
[mysql]
no-auto-rehash
prompt \\u@ceshi \\r:\\m\\s->
7.2.2多實例mysql登錄方法
多實例mysql本地登錄
[root@mysql ~]# mysql -uroot -p -S /data/3306/mysql.sock
[root@mysql ~]# mysql -uroot -p -S /data/3307/mysql.sock
提示:多實例通過mysql的-S 指定不同的sock文件登錄
註意:多實例遠程連接無需指定sock路徑
mysql -uroot -p -h 192.168.1.115 -P3306
7.3 善用mysql幫助命令help
MySQL中的help命令和linux命令行的man是類似的,想要查看MySQL中的命令使用語法,就到需要用help,help後面接相關命令及命令組合即可。例如:help create.
root@ceshi 09:4813->help
7.4 設置及修改mysql root用戶密碼
7.4.1 MySQL數據庫用戶安全策略介紹
安裝完mysql數據庫後,默認的管理員root密碼為空,很不安全,因此要設置一個密碼,在安裝MySQL單實例後,我們已經做了一些安全措施,例如:
a. 為root設置密碼
b. 刪除無用的mysql庫內的用戶賬號
c. 刪除默認存在的test數據庫。
除了上面的方法,針對MySQL數據庫的用戶處理,我們還需要刪除root添加新的管理員用戶。
(1)刪除所有mysql中的用戶,包括root超級用戶。
root@ceshi 10:5249->delete from mysql.user;
Query OK, 0 rows affected (0.00 sec)
(2)增加system並升級為超級管理員,及和root等價的用戶。
grant all privileges on *.* to ‘system‘@‘localhost‘ identified by ‘123456‘ with grant option;
7.4.2 為管理員設置密碼
mysqladmin -u root password ‘zbf666‘ 沒有密碼的用戶設置密碼。
mysqladmin -u root -S /data/3307/mysql.sock password ‘123456‘ 多實例設置密碼。
7.4.2.1 命令行外修改管理員root密碼
mysqladmin -usystem -p123456 password ‘zbf666‘
mysqladmin -usystem -p123456 password ‘zbf666‘ –S /data/3306/mysql.sock 適合多實例
7.4.2.2 Sql語句修改管理員密碼
system@ceshi 11:4303->update mysql.user set password=password("wwn520") where user=‘system‘ and host=‘localhost‘;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
system@ceshi 11:4321->flush privileges;刷新到數據文件
Query OK, 0 rows affected (0.00 sec)
提示:
1.必須指定where條件。
2.必須使用password()函數來加密更改密碼。
註意:如果是生產環境,應該起碼8為數字並且有字母數字的混合。
這種方法可以使用—skip-grant-tables找回密碼。
7.4.2.3 第三個方法修改管理員密碼
很少用這種方法
system@ceshi 11:4358->set password=password("zbf666");
Query OK, 0 rows affected (0.00 sec)
system@ceshi 11:4845->flush privileges;
Query OK, 0 rows affected (0.00 sec)
7.5 找回丟失的mysql root用戶密碼
7.5.1 啟動修改丟失的Mysql單實例root密碼方法
-
首先停止數據庫
[root@localhost ~]# /etc/init.d/mysqld stop Shutting down MySQL. SUCCESS!
-
帶--skip-grant-tables啟動mysql
[root@localhost ~]# mysqld_safe --skip-grant-tables --user=mysql & [root@localhost ~]#Mysql 登錄時空密碼
-
無密碼即可登錄mysql
[root@localhost ~]# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.72-log Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. root@ceshi 12:3556->
-
修改root密碼為新密碼
root@ceshi 12:3838->set password=password("zbf666"); ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement root@ceshi 12:3913->update mysql.user set password=password("zbf666") where user=‘system‘ and host=‘l=‘localhost‘; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 root@ceshi 12:3936->flush privileges; Query OK, 0 rows affected (0.00 sec)
-
重啟服務在登錄
[root@localhost ~]# mysqladmin -usystem -pzbf666 shutdown; 180118 00:42:53 mysqld_safe mysqld from pid file /usr/local/mysql/var/localhost.localdomain.pid ended [1]+ Donemysqld_safe --skip-grant-tables --user=mysql [root@localhost ~]# /etc/init.d/mysql start [root@localhost ~]# mysql -usystem -pzbf666 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.72-log Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement. system@ceshi 12:4329->
7.5.2 多實例MySQL啟動修改丟失root密碼
1.關閉mysql
Killall mysqld
2.啟動時加—skip-grant-tables參數,指定3306的配置文件
Mysql_safe –defaults-file=/data/3306/my.cnf –skip-grant-table &
3.登錄數據庫
Mysql –u root –p –S /data/3306/mysql.sock 登錄時空密碼
4.修改數據庫密碼
mysql> update mysql.user set password=password("zbf") where user=‘root‘;
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5 Changed: 5 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
4.重啟服務用新密碼登錄
Killall mysqd
單實例:/etc/init.d/mysqld restart
多實例:/data/3306/mysql restart
Mysql DBA 高級運維學習筆記-Mysql常用基礎命令實戰