Mysql DBA 高级运维学习笔记-Mysql常用基础命令实战

7.1 单实例mysql启动和关闭方法

(1)常规方法启动数据库

1.启动mysql服务命令

[[email protected] ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

2.查看mysql端口

[[email protected] ~]# ss -lnt|grep 3306
LISTEN 0  50*:3306 *:* 

3.查看mysql进程

会启动两个进程第一个就是mysql_safe第二个是mysqld

[[email protected] ~]# 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来启动,因为可以加参数。

[[email protected] ~]# cd /usr/local/mysql/|mysqld_safe &

(3)常规方法关闭数据库

1.关闭MySQL命令

[[email protected] ~]# /etc/init.d/mysqld stop

Shutting down MySQL. SUCCESS!

[[email protected] ~]# 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方法

[[email protected] ~]# 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 删除指定行

可以查看系统历史记录,可以删除

[[email protected] 3306]# cat /root/.bash_history

也可以查看mysql历史记录,可以删除

[[email protected] 3306]# cat /root/.mysql_history

登录后默认提示符是mysql>这个提示符可以修改,目的是为了区分测试环境和正式环境。工作中一定要先区分正式环境和测试环境。不管正式环境还是测试环境都要先备份在操作。
更改mysql数据登录提示符(了解的知识)方法如下:

1.命令行修改提示符

mysql> prompt \[email protected] \r:\m\s-> 这种改变是临时的不生效的

2.配置文件修改提示符

在my.cnf配置文件中的[mysql]模块下添加如下内容,保存后,无需重启mysql,退出当前session重新登录即可,如果在配置文件中添加,可以用\避免转义带来的问题。

[mysql]
no-auto-rehash
prompt \\[email protected] \\r:\\m\\s->

7.2.2多实例mysql登录方法

多实例mysql本地登录

[[email protected] ~]# mysql -uroot -p -S /data/3306/mysql.sock
[[email protected] ~]# 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.

[email protected] 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超级用户。

[email protected] 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语句修改管理员密码

[email protected] 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
[email protected] 11:4321->flush privileges;刷新到数据文件
Query OK, 0 rows affected (0.00 sec)

提示:

1.必须指定where条件。

2.必须使用password()函数来加密更改密码。

注意:如果是生产环境,应该起码8为数字并且有字母数字的混合。
这种方法可以使用—skip-grant-tables找回密码。

7.4.2.3 第三个方法修改管理员密码

很少用这种方法

sys[email protected] 11:4358->set password=password("zbf666");
Query OK, 0 rows affected (0.00 sec)
[email protected] 11:4845->flush privileges;
Query OK, 0 rows affected (0.00 sec)

7.5 找回丢失的mysql root用户密码

7.5.1 启动修改丢失的Mysql单实例root密码方法

  1. 首先停止数据库

    [[email protected] ~]# /etc/init.d/mysqld stop
    Shutting down MySQL. SUCCESS!
  2. 带--skip-grant-tables启动mysql
    [[email protected] ~]# mysqld_safe --skip-grant-tables --user=mysql &
    
    [[email protected] ~]#Mysql 登录时空密码
  3. 无密码即可登录mysql
    [[email protected] ~]# 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.
    [email protected] 12:3556->
  4. 修改root密码为新密码
    [email protected] 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
    
    [email protected] 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
    
    [email protected] 12:3936->flush privileges;
    
    Query OK, 0 rows affected (0.00 sec)
  5. 重启服务在登录
    [[email protected] ~]# 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
    
    [[email protected] ~]# /etc/init.d/mysql start
    
    [[email protected] ~]# 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.
    [email protected] 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

原文地址:http://blog.51cto.com/10642812/2065609

时间: 2024-11-11 19:43:01

Mysql DBA 高级运维学习笔记-Mysql常用基础命令实战的相关文章

Mysql DBA高级运维学习笔记-mysql数据库介绍

本文为我自己学习老男孩MySQL DBA 高级运维课程的学习笔记,内容均出自老男孩MySQL DBA 高级运维课程,老男孩老师讲的很好,非常感谢老男孩老师.我是一个菜鸟刚接触运维,如果我写的文章有不对的地方:请各位行业的精英.老师多多批评指点,呵呵~ 1.1 数据库介绍 1.1.1 什么是数据库?简单的说,数据库就是一个存放数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组织形式或数据之间的联系)来组织.存储的,我们可以通过数据库提供的多种方法来管理数据库里的数据. 1.2 数据库的

Mysql DBA高级运维学习笔记-Mysql数据库的多种安装方法

3.1 MySQL数据库的安装 3.1.1 yum/rpm方式安装 注意:yum/rpm方式安装MySQL适合所有MySQL软件产品系列. (1)rpm包方式安装mysql我们必须安装Mysql-server和Mysql.client包,rpm安装很简单这里就不说了. (2)yum方式安装mysqlyum 安装的方式很简单,只要执行yum install mysql-server –y即可.大的门户把源码根据企业的需求制作成rpm,搭建yum仓库,yum install xxx -y. 3.1.

Mysql DBA 高级运维学习笔记-MySQL备份与恢复实战案例及生产方案

1.全量备份与增量备份 1.1 全量备份 全量数据就是数据库中所有的数据,全量备份就是把数据库中所有的数据进行备份. 备份所有库: mysqldump -uroot -p123456 -S /data/3306/mysql.sock -F -B –A gzip >/server/backup/mysq_backup_$(date +%F).sql.gz 备份一个库: mysqldump -uroot -p123456 -S /data/3306/mysql.sock -F -B linzhong

Mysql DBA 高级运维学习笔记-Mysql增量备份及数据恢复实战

大家好本文讲了mysql数据库的增量恢复.老男孩老师讲的很好很细,我自己呢整理了老师讲的部分内容,请大家将就看:文章内容比较多.比较乱,请大家认真总结知识,发现问题请及时批评指点~ 1.1 MySQL数据库的备份与恢复 1.1.1备份单个数据库练习多种参数使用 Mysql数据库自带了一个很好用的备份命令,就是mysqldump, 它的基本使用如下: 语法:mysqldump –u用户名 –p密码 数据库名>备份的文件名 范烈1:备份名字为cuizhong的库 a.查看备份前的数据 [[email

Mysql DBA 高级运维学习笔记-mysql数据库常用管理应用

9.1 创建数据库 命令语法:create database<数据库名> 注意库名不能数字开头在mysql默认字符集情况下建立数据库测试如下: a. 建立一个名为zbf的数据库 [email protected] 08:3120->create database zbf; Query OK, 1 row affected (0.00 sec) [email protected] 08:3810->show databases like 'z%'; +---------------+

Mysql DBA 高级运维学习笔记-Mysql插入中文乱码问题

1.1 mysql插入中文数据乱码 1.1.1MySQL中添加中文数据并查看检表语句 a.创建cuizhong测试数据库并查看建表语句 mysql> create database cuizhong; Query OK, 1 row affected (0.00 sec) mysql> show create database cuizhong\G *************************** 1. row *************************** Database:

Mysql DBA 高级运维学习笔记-Mysql数据库字符集知识

1.2 Mysql数据库字符集知识 1.2.1 MySQL数据库字符集介绍 简单的说,一套文字符号及其编码.比较规则的集合. MySQL数据库字符集包括字符集(CHARACTER)和校对规则(COLLATION)两个概念.其中,字符集是用来定义MySQL数据字符串的存储方式,而校对规则则是定义比较字符串的方式.前面建库的语句中,CHARACTER SET latin1即为数据库字符集而COLLATE latin1_wedish_ci 为校对字符集,有关字符集详细内容参考mysql手册,第10张字

Mysql DBA 高级运维学习笔记-Mysql数据库中的日志文件

1.MySQL 引擎概述 1.1 什么是存储引擎 我们在录制一个视频文件的时候,可以转换成不同的格式如mp4,avi,wmv等,而且在电脑的磁盘上也会存在于不同类型的文件系统windows里常见的ntfs,fat32,存在于linux操作系统里常见的ext3,ext4,xfs.但是跟我们呈现的内容都是一样的,直观的区别是占用系统空间的大小与清晰程度不一样.那么数据库存储引擎也有很多种存储方式.无论用什么存储引擎来存储,用户看到的数据都是一样的.不同的引擎存储,引擎功能,占用的空间的大小,读取性能

Mysql DBA 高级运维学习笔记-mysql建表语句及表知识

9.9 表操作 9.9.1以默认字符集建库 以默认格式的为例,指定字符集建库 [email protected] 07:0205->create database wwn; Query OK, 1 row affected (0.00 sec) [email protected] 07:0339->SHOW CREATE DATABASE wwn\G; *************************** 1. row *************************** Database