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
- /etc/my.cnf
- /etc/mysql/my.cnf
- $MYSQL_HOME/my.cnf
- defaults-extra-file=/tmp/aa.txt
- ~/.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
配置实战例子(没有最佳的例子,只能在当前环境下根据情况来写配置文件)
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
举例:
/etc/my.cnf
不仅可以影响实例的启动(mysqld),还影响客户端程序
[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服务开启多个不同的端口(3306,3307)运行多个服务进程,这些mysql服务进程通过不同的socket来监听不同的数据端口,进而互不干涉的提供各自的服务。
在同一台服务器上,mysql多实例会去共用一套mysql应用程序,因此无需多次部署,但是,mysql 多实例之间会各自使用不同的my.cnf配置文件,启动程序和数据文件。在提供服务方面,mysql多实例在逻辑上看起来是各自独立,互不干涉的,并且多个实例之间是根据配置文件的设定值,来获取相关服务器的硬件资源。
有效利用服务器资源
当单个服务器资源过剩时,可以充分利用剩余的资源来提供更多的服务
节约服务器资源
当公司资金紧张,但数据库又需要数据库之间各自提供服务时,并且还想使用主从同步等技术,此时多实例就再好不过了
方便后期架构扩展
当公司的某个项目才启动时,启动初期并不一定有很大的用户量,因此可以先用一组物理数据库服务器,在上面部署多个实例,方便后续架构扩展、迁移
思路:
/data/3307/my.cnf
/data/3308/my.cnf
/data/3307/data
/data/3308/data
3307
3308
socket=/data/3307/mysql.sock
socket=/data/3308/mysql.sock
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
#创建多个目录
mkdir -p /data/330{7..9}
#授权
chown -R mysql.mysql /data/330*
#创建多个配置文件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
有几个实例就要写几个配置文件,
/application/mysql/scripts/mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/data/3307/data
有几个实例就要初始化几个
3.1 查看在my.cnf种写的文件是否都已经自动生成,如果第一次没有生成,就再也没法生成了,需要自己手动创建!
启动时不能直接启动,因为mysqld会先读取/etc/my.cnf配置文件,所以要使用
mysqld_safe
指定参数--defaults-file=
/application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf &
netstat -lnp|grep 330
mysql -S /data/3307/mysql.sock -e "show variables like 'server_id'"