2.创建目录
1. #创建3个节点文件夹 主主从模式
mkdir -p /data/mysql/{mysql3306,mysql3307,mysql3308}
#存放日志信息
mkdir -p /data/mysql/log
#子节点信息
mkdir -p /data/mysql/mysql3306/{data,binlog,relay_log}
mkdir -p /data/mysql/mysql3307/{data,binlog,relay_log}
mkdir -p /data/mysql/mysql3308/{data,binlog,relay_log}
#添加权限
chown -R mysql.mysql /mysql/data/(必须要添加用户权限 不然会报错)
1.源码正常安装 不要用yum安装
我这里安装在/data/mysql/mysql下 因为数据盘挂在/data
打开 /etc/my.cnf编辑配置多节点
[mysqld_multi]
mysqld = /data/mysql/mysql/bin/mysqld_safe
mysqladmin =/data/mysql/mysql/bin/mysqladmin
#日志地址
log =/data/mysql/mysql/logs/mysqld_multi.log
[mysqld3306]
#锁
socket = /data/mysql/mysql3306/mysql.sock
port = 3306
##pid文件
pid-file = /data/mysql/mysql3306/mysqld.pid
##数据存放地址
datadir = /data/mysql/mysql3306/data
## lob bin存放地址
log_bin=/data/mysql/mysql3306/binlog
#server的id,一个mysql集群里面或多个mysql,只能有一个为一个的id
#一般是ip最后位数+端口号
##server的id
server-id = 3306
##relay 日志地址
relay_log =/data/mysql/mysql3306/relay_log/mysql-relay-bin
log_slave_updates = 1
read_only = 0
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 0
# binlog记录内容的方式,记录被操作的每一行
binlog_format = mixed
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
# 指定需要复制的数据库名为test
# binlog-do-db = test
# 忽略系统库
binlog-ignore-db = mysql,information_schema
# 自动增长量
auto-increment-increment=2
# 自动增长开始值
auto-increment-offset=1
[mysqld3307]
socket = /data/mysql/mysql3307/mysql.sock
port = 3307
pid-file = /data/mysql/mysql3307/mysqld.pid
datadir = /data/mysql/mysql3307/data
log_bin=/data/mysql/mysql3307/binlog
server-id = 3307
relay_log =/data/mysql/mysql3307/relay_log/mysql-relay-bin
log_slave_updates = 1
read_only = 0
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 0
binlog_format = mixed
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
binlog-ignore-db = mysql,information_schema
auto-increment-increment=2 //自动增长量
auto-increment-offset=2 //自动增长开始值
[mysqld3308]
socket = /data/mysql/mysql3308/mysql.sock
port = 3308
pid-file = /data/mysql/mysql3308/mysqld.pid
datadir = /data/mysql/mysql3308/data
log_bin=/data/mysql/mysql3308/binlog
server-id = 3308
relay_log =/data/mysql/mysql3308/relay_log/mysql-relay-bin
log_slave_updates = 1
read_only = 0
innodb_buffer_pool_size = 128M
innodb_flush_log_at_trx_commit = 0
binlog_format = mixed
# 减少记录日志的内容,只记录受影响的列
binlog_row_image = minimal
#0:log buffer将每秒一次地写入log file中,并且log。file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
#1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
#2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
innodb_flush_log_at_trx_commit=1
#默认,sync_binlog=0,表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新。这时候的性能是最好的,但是风险也是最大的。
#如果sync_binlog>0,表示每sync_binlog次事务提交,MySQL调用文件系统的刷新操作将缓存刷下去。
#最安全的就是sync_binlog=1了,表示每次事务提交,MySQL都会把binlog刷下去,是最安全但是性能损耗最大的设置。
sync_binlog=1
3.初始化数据库
cd /data/mysql/mysql/bin
#初始化3306 - 3310节点
如出现以下报错请添加mysql默认目录的环境变量或添加临时遍历
export PATH=/data/mysql/mysql/bin:$PATH
WARNING: my_print_defaults command not found.
Please make sure you have this command available and
in your path. The command is available from the latest
MySQL distribution.
WARNING: Log file disabled. Maybe directory or file isn't writable?
ABORT: Can't find command 'my_print_defaults'.
This command is available from the latest MySQL
distribution. Please make sure you have the command
in your PATH.
./mysql_install_db --user=mysql --basedir=/data/mysql/mysql/ --datadir=/data/mysql/mysql3306/data
# 初始密码在 cat /root/.mysql_secret
./mysql_install_db --user=mysql --basedir=/data/mysql/mysql/ --datadir=/data/mysql/mysql3307/data
# 初始密码在 cat /root/.mysql_secret
./mysql_install_db --user=mysql --basedir=/data/mysql/mysql/ --datadir=/data/mysql/mysql3308/data
# 初始密码在 cat /root/.mysql_secret
# 每初始化一个记录一次密码 初始化会覆盖密码
#启动数据库
#efaults-extra-file 配置文件地址
#start 1 表示启动mysql1
#start 1,2,3 表示启动mysqld1,mysqld2,mysqld3
#启动所有节点
./mysqld_multi --defaults-extra-file=/etc/my.cnf start 3306,3307,3308
#关闭数据库3306 节点 但是我这里不生效 我只能 ps 去kill
./mysqld_multi --defaults-extra-file=/etc/my.cnf stop 3306,3307,3308,3309,3310
#登录节点3007(第一种登录方式)
#通过mysql客户端连接
mysql -h 127.0.0.1 -P 3306 -u root -proot
mysql -h 127.0.0.1 -P 3307 -u root -proot
mysql -h 127.0.0.1 -P 3308 -u root -proot
(第一种方式我登录不了 第二种可以)
#登录到实例(第二种登录方式)
#-proot root是密码
mysql --socket=/data/mysql/mysql3307/mysql.sock -proot
###4.添加到开机启动
#编辑rc.local
vim /etc/rc.local
#添加下面配置
su - root -c 'mysqld_multi --defaults-extra-file=/etc/my.cnf start 3306,3307,3308'
#删除默认的mysql 3306启动的配置
systemctl disable mysqld