专职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多实例 公用硬件资源,独立的数据、配置文件,独立启动。