1. 程式人生 > >Mysql DBA 高級運維學習筆記-Mysql常用基礎命令實戰

Mysql DBA 高級運維學習筆記-Mysql常用基礎命令實戰

linux命令行 redhat esp sys dem mys pre 解決 運維學習

7.1 單實例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密碼方法

  1. 首先停止數據庫

    [root@localhost ~]# /etc/init.d/mysqld stop
    Shutting down MySQL. SUCCESS!
  2. 帶--skip-grant-tables啟動mysql

    [root@localhost ~]# mysqld_safe --skip-grant-tables --user=mysql &
    
    [root@localhost ~]#Mysql 登錄時空密碼
  3. 無密碼即可登錄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->
  4. 修改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)
  5. 重啟服務在登錄

    [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常用基礎命令實戰