想做主从库,但是资源又有限,不得不在一台服务器上做主从库。在一台服务器上部署MySQL多实例,目前主要有两种策略:
1.配置多个实例,每个实例对应不同的配置文件,曾经在windows服务器上就是这么做的;
2.通过官方自带的 mysqld_multi 一个单独的配置文件来实现多实例,集中管理。
这一次,在Linux服务器上安装MySQL多实例,就决定使用第二种策略。
MySQL多实例安装
第一步,安装MySQL之前的准备工作;
#下载安装包
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.32-el7-x86_64.tar.gz
#解压安装包
tar zxvf mysql-5.7.32-el7-x86_64.tar.gz
#迁移,保证放在合适的位置,方便日后维护;
mv mysql-5.6.21-linux-glibc2.5-x86_64 /usr/local/mysql
第二步,MySQL的相关配置;
1.为MySQL创建专属用户;
#创建mysql用户组
groupadd -g 27 mysql
#创建该组下的用户
useradd -u 27 -g mysql-admin mysql
#查看用户的id信息
id mysql-admin
uid=27(mysql-admin) gid=27(mysql) groups=27(mysql)
创建用户时,-g 后第一个是用户名,第二个是组名
2.创建MySQL多实例放置的目录
#为每个实例创建单独的文件,以便存放对应的数据文件、日志文件、临时文件
mkdir -p /mnt/databases/mysql/{mysql_3306,mysql_3307}
mkdir /mnt/databases/mysql/mysql_3306/{data,log,tmp}
mkdir /mnt/databases/mysql/mysql_3307/{data,log,tmp}
#更改目录权限
chown -R mysql-admin:mysql /mnt/databases/mysql/
chown -R mysql-admin:mysql /usr/local/mysql/
#添加环境变量
echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile
source /etc/profile
授权时,:前面是用户名,后面在组名
3.创建配置文件my.cnf
#使用vim打开配置文件,文件不存在会新建一个
vim /usr/local/mysql/support-files/my.cnf
#输入i进入插入模式
i
my.cnf内容如下
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
log=/mnt/databases/mysql/mysqld_multi.log
[mysqld]
user=mysql-admin
basedir=/usr/local/mysql
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld3306]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/mnt/databases/mysql/mysql_3306/data
port=3306
server_id=3306
socket=/tmp/mysql_3306.sock
log-output=file
slow_query_log=1
long_query_time=1
slow_query_log_file=/mnt/databases/mysql/mysql_3306/log/slow.log
log-error=/mnt/databases/mysql/mysql_3306/log/error.log
binlog_format=mixed
log-bin=/mnt/databases/mysql/mysql_3306/log/mysql3306_bin
[mysqld3307]
mysqld=mysqld
mysqladmin=mysqladmin
datadir=/mnt/databases/mysql/mysql_3307/data
port=3307
server_id=3307
socket=/tmp/mysql_3307.sock
log-output=file
slow_query_log=1
long_query_time=1
slow_query_log_file=/mnt/databases/mysql/mysql_3307/log/slow.log
log-error=/mnt/databases/mysql/mysql_3307/log/error.log
binlog_format=mixed
log-bin=/mnt/databases/mysql/mysql_3307/log/mysql3307_bin
4.操作完成后,保存退出
#按ESC按钮退出编辑
esc
#强制保存修改内容
:wq!
5.复制my.cnf文件到etc目录
cp /usr/local/mysql/support-files/my.cnf /etc/my.cnf
第三步,初始化数据库;
1.初始化数据库
#进入到mysql的bin目录下
cd /usr/local/mysql/bin
#执行初始化3306数据库
./mysqld --initialize --user=mysql-admin --basedir=/usr/local/mysql/ --datadir=/mnt/databases/mysql/mysql_3306/data
#初始化3307数据库
./mysqld --initialize --user=mysql-admin --basedir=/usr/local/mysql/ --datadir=/mnt/databases/mysql/mysql_3307/data
初始化成功结果图,产生临时密码
2.拷贝启动文件
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
3.mysqld_multi进行多实例管理:
#启动全部实例:
/usr/local/mysql/bin/mysqld_multi start
#查看全部实例状态:
/usr/local/mysql/bin/mysqld_multi report
#启动单个实例:
/usr/local/mysql/bin/mysqld_multi start 3306
#停止单个实例:
/usr/local/mysql/bin/mysqld_multi stop 3306
#查看单个实例状态:
/usr/local/mysql/bin/mysqld_multi report 3306
#停止实例命令失效时,使用如下命令:
mysqladmin -u root -p -S /tmp/mysql_3306.sock shutdown
Enter password:
#查看启动进程
netstat -tlnap | grep mysql
初始化成功结果图,产生临时密码
使用临时密码登录数据库,登录后重置密码,最后再重启;
#逐一登录mysql,输入临时密码登录;
mysql -S /tmp/mysql_3306.sock -p
Enter password:
#设置新密码
set password for root@'localhost'=password('123456');
flush privileges;
到目前为止,数据库多实例已经安装好,接下来做主从同步;
主从同步##
第一步,主从库配置文件修改;
#打开配置文件my.cnf
vim /usr/local/mysql/support-files/my.cnf
#在 主库[mysqld3306] 下增加配置,忽略同步的数据库名称;
binlog-ignore-db=mysql
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
配置更改后,进行数据库重启;
#关闭3306,启动3306;3307没有修改,不需要进行重启;
mysqladmin -u root -p -S /tmp/mysql_3306.sock shutdown
mysqld_multi start 3306
第二步,主从库授权;
1.主库授权
grant replication slave on *.* to 'test'@'127.0.0.1' identified by '123456';
#授权后需要刷新后,才能生效;
flush privileges;
#查看主库授权状态
show master status;
主库授权
2.从库授权
#注意:从库的几个参数一定要和主库的保持一致
change master to master_host='127.0.0.1',master_user='test',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=154;
#启动主从拷贝
start slave;
#查看拷贝状态
show slave status;
#清除授权,授权信息也被清除掉
reset slave all;
#查看状态
show slave status \G
当查看从库的slave状态,下面两个状态都是yes时,代表主从库配置成功了。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
最后,加点补充,为了防止从库被篡改,建立一个新的只读账户,对外只开放这个只读账号,禁止对从库数据库的操作,只能读,不能写。这样主从库的同步又多了一个保障。
GRANT SElECT ON *.* TO 'root_readonly'@'%' IDENTIFIED BY "123456";
#执行刷新,刷新后;
flush privileges;
参考文章:
https://blog.csdn.net/lihuarongaini/article/details/100119827
https://blog.csdn.net/weixin_42793426/article/details/81329720
Win10下Mysql主从库配置二次整理:https://www.jianshu.com/p/70913d116f31
Linux小白,初次安装MySQL,大神请绕路:https://www.jianshu.com/p/757663b26d82
网友评论