1.mysql的启动方式
a 日常启动,停止
mysql.server start ---> mysqld_safe ---> mysqld #sys-v的方式 mysql.server 脚本调用mysqld_safe然后再调用mysqld
mysql.service ---> mysqld #systemd的方式 mysql.service脚本直接调用mysqld
上面的方式都会去检查/etc/my.cnf的配置并读取并执行
b 维护性启动
mysqld_safe --skip-grant-tables --skip-networking & 
一般会将需要的临时性的参数加到命令行中执行,此时也会读取/etc/my.cnf中的参数,但是如果这两者有冲突,则命令行中加的参数优先级最
高
实际上也可以使用  mysqld_safe & 来启动数据库, mysqladmin -uroot -p123 shutdown 来关闭数据库。
但实际上很少这么使用
2.初始化配置
a.作用
     影响数据库的启动
     影响客户端的功能
b.初始化配置的方法
     初始化配置文件(如:/etc/my.cnf)
     启动命令行上进行设置(如:mysqld_safe)
     预编译时设置(仅限于编译安装时设置)
c.初始化配置文件的书写格式
[标签]
xxx=xxx
d.配置文件标签的归类
影响到服务器端有
  [mysqld]
  [mysqld_safe]
  [server]可以概括mysqld 和 mysqld_safe
影响到客户端的有
  [mysql]
  [mysqladmin]
  [mysqldump]
  [client]可以概括mysql mysqladmin mysqldump
不推荐使用 server client 这种概括的方式去写配置文件
e.配置文件的模板
[mysqld]
user=mysql
basedir=/application/mysql  #软件安装目录
datadir=/data/mysql/data    #数据存放位置
socket=/tmp/mysql.sock      #socket存放位置
server_id=6                 #id号,主从复制时使用,范围(1-65535)
port=3306
[mysql]
socket=/tmp/mysql.sock     #需和mysqld中的位置一致
f.mysqld_safe 与 mysqld的区别
  mysqld_safe是服务端工具,用于启动mysqld,并且是mysqld的守护进程,mysqld_safe加&在后台运行$BASEDIR/bin/mysqld_safe &
  
  因为mysqld_safe是mysqld的守护进程,所以mysqld_safe脚本会在启动MySQL服务器后继续监控其运行情况,并在其死机时重新启动它。
g.配置文件的读取顺序
[root@localhost ~]# mysqld --help --verbose | grep my.cnf
/etc/my.cnf 
/etc/mysql/my.cnf 
/usr/local/mysql/etc/my.cnf 
~/.my.cnf
                      
配置文件读取顺序由上到下,如有冲突项,则最下面的配置文件优先级最高
[root@localhost ~]# vim .my.cnf
[mysqld]
socket=/tmp/aa.sock
[root@localhost ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS!
Starting MySQL. SUCCESS!
[root@localhost ~]# netstat -lnp | grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      2920/mysqld
unix  2      [ ACC ]     STREAM     LISTENING     46071    2920/mysqld          /tmp/aa.sock
此时可发现sock文件的位置变成来/tmp/aa.sock
直接登录也会报错
[root@localhost ~]# mysql -uroot -p123
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
指定sock文件位置就可以登录了
[root@localhost ~]# mysql -uroot -p123 -S /tmp/aa.sock
一般不建议设置其他的配置文件,容易引起混乱,但是这是一个排错的思路,就是配置文件都是对的,但是依然不行,就要考虑是不是存在多
份配置文件来
h.强制使用指定的配置文件
维护性启动时可使用参数 --defaults-file=~/123.txt 让mysql只加载这一个文件
2.mysql的连接管理
mysql
tcp/ip mysql -uroot -p -h 192.168.56.11 -P3306
连接前要确认 root用户是否有授权连接192.168.56.11
socket mysql -uroot -p -S /tmp/mysql.sock
如何区分是socket登录还是tcp/ip登录,使用 show processlist即可查看
mysql> mysql> show processlist;
+----+------+---------------------+------+---------+------+----------+------------------+
| Id | User | Host                | db   | Command | Time | State    | Info             |
+----+------+---------------------+------+---------+------+----------+------------------+
|  6 | root | 192.168.56.11:38160 | NULL | Query   |    0 | starting | show processlist |
+----+------+---------------------+------+---------+------+----------+------------------+
其中38160为连接到的线程
mysql> show processlist;
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host      | db   | Command | Time | State    | Info             |
+----+------+-----------+------+---------+------+----------+------------------+
|  7 | root | localhost | NULL | Query   |    0 | starting | show processlist |
+----+------+-----------+------+---------+------+----------+------------------+
1 row in set (0.00 sec)
localhost就是使用socket连接的
3.多实例
先搭建多实例环境
创建文件夹
[root@localhost ~]# mkdir -p /data/330{7,8,9}/data
[root@localhost ~]# tree /data
/data
├── 3307
│   └── data
├── 3308
│   └── data
├── 3309
    └── data
先写3份配置文件
cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/mysql-bin
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/mysql-bin
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/mysql-bin
EOF
接下来初始化数据
mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/application/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/application/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/application/mysql
配置启动脚本
cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service
[root@localhost system]# vim mysqld3307.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
[root@localhost system]# vim mysqld3308.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
[root@localhost system]# vim mysqld3309.service
ExecStart=/application/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
授权&启动
[root@localhost system]# chown -R mysql.mysql /data/*
[root@localhost system]# systemctl start mysqld3307.service
[root@localhost system]# systemctl start mysqld3308.service
[root@localhost system]# systemctl start mysqld3309.service
验证
[root@localhost system]# netstat -nlp | grep 330
tcp6       0      0 :::3306                 :::*                    LISTEN      3213/mysqld
tcp6       0      0 :::3307                 :::*                    LISTEN      3828/mysqld
tcp6       0      0 :::3308                 :::*                    LISTEN      3722/mysqld
tcp6       0      0 :::3309                 :::*                    LISTEN      3756/mysqld
unix  2      [ ACC ]     STREAM     LISTENING     56991    3756/mysqld          /data/3309/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     57170    3828/mysqld          /data/3307/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     59381    3722/mysqld          /data/3308/mysql.sock
[root@localhost system]# mysql -S /data/3307/mysql.sock -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
|           7 |
+-------------+
[root@localhost system]# mysql -S /data/3308/mysql.sock -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
|           8 |
+-------------+
[root@localhost system]# mysql -S /data/3309/mysql.sock -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
|           9 |
+-------------+
如果要连接的话使用sock文件连接即可
[root@localhost ~]# mysql -S /data/3307/mysql.sock
4.mysql的内置功能
 a.连接数据库
     
    -u 
    -p
    -S
    -h
    -P
    -e    免交互执行sql
    <     恢复数据使用
  eg: 
     mysql -uroot -p -S /tmp/mysql.sock      #使用本地socket文件连接
     mysql -uroot -p -h10.0.0.1 -P3306       #连接远程主机
     mysql -uroot -p -e "show databases;"    #直接执行sql语句
     
  
    mysql -uroot -p123 world < world.sql     #恢复备份
 b.内置命令
 
   help 打印帮助
   ctrl +d 退出mysql
   \G    格式化输出        select * from mysql.user\G;
   source 导入文件    
   mysql> use world
   source  /root/world.sql
附
用MySQL的source命令导入SQL文件实战记录。
进入 CMD
执行 mysql -uroot -p 输入密码后进入 MySQL 命令提示符
依次执行:
use XXXdatabase;
set charset utf8;
source d:/xxx.sql;
本以为这样就可以挂机等待 sql 文件如期导入了,但是事与愿违,当过一段时间在打开时发现命令行提示链接超时,等待重新链接。
这时候需要再执行以下 sql:
set global max_allowed_packet=100000000;
set global net_buffer_length=100000;
set global interactive_timeout=28800000;
set global wait_timeout=28800000;
以上语句的解释:
max_allowed_packet=XXX 客户端/服务器之间通信的缓存区的最大大小
net_buffer_length=XXX TCP/IP 和套接字通信缓冲区大小,创建长度达 net_buffer_length 的行
interactive_timeout 对后续起的交互链接有效时间
wait_timeout 对当前交互链接有效时间。
 
                    
                 
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号