(6)MySQL实例初始化配置文件讲解及多实例主机配置操作

文章目录

    • MySQL初始化配置文件作用
    • 初始化配置实例
      • 预编译的选项: cmake,硬编码到程序当中
      • 在命令行上初始化配置:
    • 初始化配置文件my.cnf(重点)
      • 关于配置文件的读取顺序
        • mysql的初始化配置文件的使用:
        • 如何熟悉写一个my.cnf配置文件
    • MySQL多实例配置
      • 多实例是什么?
      • 为什么要使用多实例?
        • 多实例优点
        • 多实例缺点
      • MySQL多实例实践
        • 多实例配置方法

MySQL初始化配置文件作用

(6)MySQL实例初始化配置文件讲解及多实例主机配置操作_第1张图片
说明:

  1. 如果没有告诉mysqld_safe例如分给多少内存这些条件,mysqld_safe会按照统一(默认)的配置进行启动!
  2. MySQL的启动很多必要条件都是需要管理人员提前设定好才能够正常运行!

初始化配置实例

  • 如何提前设定必要条件?

如图所示:有三个方式进行设定!
(6)MySQL实例初始化配置文件讲解及多实例主机配置操作_第2张图片

预编译的选项: cmake,硬编码到程序当中

在命令行上初始化配置:

 mysqld_safe 
--skip-grant-tables 
--skip-networking 
--socket=/tmp/mysql.sock &

结论:

cmake里面加的选项都可以在命令行中加入使用!
如果预编译和命令行使用的参数相同,那么会以命令行为准

问题:

本身编译好的参数,如果在命令行进行外部干预,会导致在使用mysql命令登录的时候出现报错

mysql -uroot -p1234
Warning: Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/application/mysql-5.6.38/tmp/mysql.sock' (2)

解决:

如果命令行指定的参数变化了,在使用mysql的时候也需要加入参数指定一下

mysql -uroot -p1234 -S /tmp/mysql.sock

初始化配置文件my.cnf(重点)

关于配置文件的读取顺序

(6)MySQL实例初始化配置文件讲解及多实例主机配置操作_第3张图片

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. $MYSQL_HOME/my.cnf
  4. defaults-extra-file=/tmp/aa.txt
  5. ~/.my.cnf

说明:
-defaults-extar-file优先级最高

假设4个配置文件都存在,同时使用 -defaults-extar-file指定了参数文件,如果这时有一个“参数变量”在5个配置文件中都出现了,那么后面的配置文件中的参数变量值会覆盖前面配置文件中的参数变量值,就是说会使用~/.my.cnf中设置的值

注意:

如果使用./bin/mysqld_safe 守护进程启动mysql数据库时,使用了参数-defaults-file=<配置文件的绝对路径>,这时只会使用这个参数指定的配置文件,不会再读取上面提到的5个路径!

  • 优先级的结论说明:

1.命令行
2.defaults-file
3.家目录下的配置文件
4.defaults-extra-file
5.环境变量$MYSQL_HOME
6./etc/mysql/my.cnf
7./etc/my.sql
8.预编译cmake

mysql的初始化配置文件的使用:

配置实战例子(没有最佳的例子,只能在当前环境下根据情况来写配置文件)

vim /etc/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/data/mysql
server-id=20
proot=3306
log-bin=/data/mysql/mysql-bin
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.log

如何熟悉写一个my.cnf配置文件

举例:

/etc/my.cnf

不仅可以影响实例的启动(mysqld),还影响客户端程序

  • 把配置文件分为两大部分:
    配置模块/标签分类:
    (6)MySQL实例初始化配置文件讲解及多实例主机配置操作_第4张图片
[client]所有客户端程序包括以下
                [mysql]
                [mysqldump]
[server]所有服务器端程序包括以下
                [mysqld]
                [mysqld_safe]
  • 服务器实例:模块/标签

可以通过[mysqld_safe](范畴比较大)
最终启动的程序[mysqld](控制实例的)
1、在[mysqld]模块下设置路径
datadir
basedir
socket
log路径
。。。。
在/etc/my.ocf编写:基础配置文件

[mysqld]
basedir=/application/mysql
datadir=/application/mysql/data
socket=/tmp/mysql.sock
log-error=/tmp/mysql.log
log-bin=/data/mysql/mysql-bin #二进制文件
server-id=3306   #唯一标识非零-65535

[client]
socket=/tmp/mysql.sock

#下面是用户和密码,不安全不建议用
user=root
password=123

MySQL多实例配置

多实例是什么?

多套进程 + 多套线程 + 多套预分配内存

多个端口,多个配置文件,多个日志文件,多个socket,多套数据,多个server_id
(6)MySQL实例初始化配置文件讲解及多实例主机配置操作_第5张图片

为什么要使用多实例?

  1. 简单理解就是在一台服务器上,mysql服务开启多个不同的端口(3306,3307)运行多个服务进程,这些mysql服务进程通过不同的socket来监听不同的数据端口,进而互不干涉的提供各自的服务。

  2. 在同一台服务器上,mysql多实例会去共用一套mysql应用程序,因此无需多次部署,但是,mysql 多实例之间会各自使用不同的my.cnf配置文件,启动程序和数据文件。在提供服务方面,mysql多实例在逻辑上看起来是各自独立,互不干涉的,并且多个实例之间是根据配置文件的设定值,来获取相关服务器的硬件资源。

多实例优点

  1. 有效利用服务器资源
    当单个服务器资源过剩时,可以充分利用剩余的资源来提供更多的服务

  2. 节约服务器资源
    当公司资金紧张,但数据库又需要数据库之间各自提供服务时,并且还想使用主从同步等技术,此时多实例就再好不过了

  3. 方便后期架构扩展
    当公司的某个项目才启动时,启动初期并不一定有很大的用户量,因此可以先用一组物理数据库服务器,在上面部署多个实例,方便后续架构扩展、迁移

多实例缺点

  1. 资源互相抢占问题
    当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存、CPU和IO资源,这将导致服务器上的其它实例提供服务的质量下降。
    这就比如说合租房的各个租客,每当早晨上班时,都会洗漱,此时卫生间的占用率就大,各个租客总会发生等待。

MySQL多实例实践

思路:

  1. 多套配置文件
/data/3307/my.cnf
/data/3308/my.cnf
  1. 多套数据
/data/3307/data
/data/3308/data
  1. 多个端口
3307
3308
  1. 多个socket
socket=/data/3307/mysql.sock
socket=/data/3308/mysql.sock
  1. 多个日志文件
log-error=/data/3307/error_3307.err
log-error=/data/3308/error_3308.err
pid-file=/data/3307/mysqld.pid
pid-file=/data/3308/mysqld.pid
  1. 多个启动程序

多实例配置方法

  1. mysql_multi
  2. 实现上面的6种思路
  • 例子
  1. 创建多个目录及授权
#创建多个目录
mkdir -p /data/330{7..9}
#授权
 chown -R mysql.mysql /data/330*
  1. 创建多个配置文件
#创建多个配置文件my.cnf

vim my.cnf
[mysqld]
basedir=/application/mysql #主程序是调用的不是独占!也可以重新装一个
datadir=/data/3307/data
socket=/data/3307/mysql.sock
port=3307
log-error=/data/3307/mysql.err
log_bin=/data/3307/mysql-bin
binlog_format=row
skip-name-resolve
server-id=7

有几个实例就要写几个配置文件,

  1. 初始化
/application/mysql/scripts/mysql_install_db  --user=mysql --basedir=/application/mysql  --datadir=/data/3307/data

有几个实例就要初始化几个

3.1 查看在my.cnf种写的文件是否都已经自动生成,如果第一次没有生成,就再也没法生成了,需要自己手动创建!

  1. 启动多实例

启动时不能直接启动,因为mysqld会先读取/etc/my.cnf配置文件,所以要使用mysqld_safe指定参数--defaults-file=

/application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &
  1. 验证
netstat -lnp|grep 330
  1. 连接测试
mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"

你可能感兴趣的:(MySQL数据库)