专职DBA-MySQL连接启动与多实例数据库

专职DBA-MySQL连接启动与多实例数据库
作者:周万春
微信:lovemysql3306


MySQL连接工具-mysql命令使用
自带客户端命令
mysql命令常用参数:
-u      用户
-p      密码
-h      IP地址
-S      socket文件
-P      端口
-e      免交互执行命令
<       导入SQL脚本
-f      强制执行忽略报错
-BNse   ***


远程登录
[root@db01 ~]# mysql -uzhouwanchun -p -h10.0.0.11 -P3306

本地登录
[root@db01 ~]# mysql -udba -p -S /data/mysql/mysql3306/sock/mysql.sock

[root@db01 ~]# mysql -uroot -p默认走的是本地socket,socket文件必须在/tmp/mysql.sock
读的配置文件是
[root@db01 ~]# mysqld --verbose --help | grep /my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

导入SQL脚本
[root@db01 ~]# mysql.dba < /disk/world.sql -f
[root@db01 ~]# mysql.dba -e "show databases;"
[root@db01 ~]# mysql.dba -BNse "show databases;"
app01
information_schema
mysql
performance_schema
sys
world


MySQL数据库启动方式流程介绍
service mysqld start & /etc/init.d/mysqld start 找的都是 /usr/local/mysql/bin/mysqld_safe
/usr/local/mysql/bin/mysqld_safe 找的是 /usr/local/mysql/bin/mysqld 最终由 mysqld 将数据库实例拉起来。


MySQL启动方式
[root@db01 ~]# mkdir -p /usr/local/mysql/etc
[root@db01 ~]# ln -s /data/mysql/mysql3306/conf/my3306.cnf /usr/local/mysql/etc/my.cnf
[root@db01 ~]# chown -R mysql:mysql /usr/local/mysql/etc
[root@db01 ~]# cp -a /usr/local/mysql/support-files/mysql.server /etc/init.d/
[root@db01 ~]# chmod 700 /etc/init.d/mysql.server
[root@db01 ~]# file /etc/init.d/mysql.server
/etc/init.d/mysql.server: POSIX shell script, ASCII text executable
[root@db01 ~]# mysqladmin.shutdown
[root@db01 ~]# ps -ef | grep mysqld
[root@db01 ~]# /etc/init.d/mysql.server start
[root@db01 ~]# ps -ef | grep mysqld
root       6224      1  1 01:53 pts/1    00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql/mysql3306/data --pid-file=/data/mysql/mysql3306/data/db01.pid
mysql      8220   6224 15 01:53 pts/1    00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql/mysql3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/mysql3306/log/error.log --open-files-limit=65535 --pid-file=/data/mysql/mysql3306/data/db01.pid --socket=/data/mysql/mysql3306/sock/mysql.sock --port=3306
root       8274   6193  0 01:53 pts/1    00:00:00 grep --color=auto mysqld

[root@db01 ~]# mysql -udba -p
[root@db01 ~]# /etc/init.d/mysql.server stop
Shutting down MySQL.. SUCCESS!
[root@db01 ~]# ps -ef | grep mysqld


[root@db01 ~]# mysqld &
[root@db01 ~]# ps -ef | grep mysqld
mysql      8364   4000 15 01:56 pts/0    00:00:00 mysqld
root       8417   4000  0 01:56 pts/0    00:00:00 grep --color=auto mysqld
[root@db01 ~]# netstat -lnp | grep mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      8364/mysqld         
tcp6       0      0 :::33060                :::*                    LISTEN      8364/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     54643    8364/mysqld          /data/mysql/mysql3306/sock/mysqlx.sock
unix  2      [ ACC ]     STREAM     LISTENING     54646    8364/mysqld          /data/mysql/mysql3306/sock/mysql.sock
[root@db01 ~]# mysql.dba
[root@db01 ~]# mysqladmin.shutdown


以上多种方式,都可以单独启动MySQL服务
mysqld_safe和mysqld一般是在临时维护时使用。
另外,从CentOS7系统开始,支持systemd直接调用mysqld的方式进行启动数据库。


MySQL数据库root密码忘记了?
跳过授权表登录数据库,不让它验证登录
把验证模块给关掉
--skip-grant-tables : 连接层关闭验证模块,所有验证表不加载。
--skip-networking  : 连接层关闭tcp/ip协议,禁止远程访问。

[root@db01 ~]# mysqladmin.shutdown
[root@db01 ~]# mysqld --defaults-file=/data/mysql/mysql3306/conf/my.cnf --skip-grant-tables --skip-networking &
密码为空或者随便输入都能登录数据库了这次
[root@db01 ~]# mysql -S /data/mysql/mysql3306/sock/mysql.sock
[root@:mysql.sock] [(none)]> select user(),current_user();
+--------+-----------------------------------+
| user() | current_user()                    |
+--------+-----------------------------------+
| root@  | skip-grants user@skip-grants host |
+--------+-----------------------------------+
1 row in set (0.00 sec)

但是远程不能登录数据库(因为没有端口)
[root@db01 ~]# mysql -uzhouwanchun -p -h10.0.0.11 -P3306
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.11' (111)    '

修改密码
[root@:mysql.sock] [(none)]> alter user 'root'@'localhost' identified by '3306';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement

不能正常去修改密码了,因为你的授权表根本就没有加载到内存,加载不了。
[root@:mysql.sock] [(none)]> flush privileges;
[root@:mysql.sock] [(none)]> alter user 'root'@'localhost' identified by 'lovemysql3306';
[root@:mysql.sock] [(none)]> shutdown;
[root@db01 ~]# mysqld.start
[root@db01 ~]# mysql -uroot -p -S /data/mysql/mysql3306/sock/mysql.sock
Enter password:lovemysql3306

初始化配置方法:
预编译
命令行参数(仅限于 mysqld_safe和mysqld)
配置文件(所有启动方式)

初始化配置优先级:命令行 > 配置文件 > 预编译

初始化配置文件的默认读取路径:
[root@db01 ~]# mysqld --verbose --help | grep /my.cnf
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
他们的优先级是后者覆盖前者。
默认情况下,MySQL启动时,会依次读取以上配置文件,如果有重复选项,会以最后一个文件设置的为准。
但是,如果启动时加入了--defaults-file=xxx时,读你自己指定的配置文件以上所有的文件都不会读取了!
--defaults-extra-file=# 这个是最后要加载的额外配置文件。
可以验证测试一下,比如设置端口号或者socket
[root@db01 ~]# vim ~/.my.cnf
[mysqld]
socket=/tmp/mysql3306.sock
[root@db01 ~]# /etc/init.d/mysqld start
[root@db01 ~]# ls -l /tmp/
total 4
srwxrwxrwx 1 mysql mysql 0 Mar  8 07:16 mysql3306.sock
-rw------- 1 mysql mysql 5 Mar  8 07:16 mysql3306.sock.lock
[root@db01 ~]# rm -rf ~/.my.cnf


初始化配置文件的书写方式:
[标签]
配置项=xxx

标签类型:服务端的、客户端的

客户端标签:
[client]
[mysql]
[mysqldump]

服务端标签:
[mysqld]
[server]
[mysqld_safe]
[mysqld_multi]


MySQL多实例
公用硬件资源,独立的数据、配置文件,独立启动。
原文地址:https://www.cnblogs.com/zhouwanchun/p/11121080.html