linux 搭建mysql读写_Linux6.3安装Mysql5.7多实例并实现读写分离

进入官网

5302844570b30b0adc6f5f4fc9b6c501.png 版本选择

选择自己合适的版本(目前最新版本是8.0),由于每个版本的安装方式有差异,这里演示安装的是5.7.22版,如果非此版本,请参考其他博客文章

73643d1222c51bd62b5046efb58fe9ed.png     我的系统是centOS6.3,所以选择下面选项,请根据实际情况选择合适的版本

603d3553c46988e2c1a941f29005b600.png

下载

右键复制链接

8c8ad28f3cff63d938f0c1a66bb111b9.png

cd /opt

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

b38c3d87d8f2404895f163025a77814a.png

bc4ad403aa55df501418858a430b052b.png

下载完成解压并移动到/usr/local/

tar -zxvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

df408a60ecae153cc6a7893eefee9b27.png

52190b2ba35e6c055d0c1fcd06a3cdfb.png

创建mysql实例用户和文件

useradd mysql -r -s /sbin/nologin

mkdir -p /usr/local/mysql/mysql_files

创建多实例数据目录

mkdir -p /data/mysql_data{1..3}

b3ab3c004a545a3a3b38dec0842b001d.png

修改mysql目录的属组及用户

chown root.mysql -R /usr/local/mysql

修改专用目录的属主及属组

chown mysql.mysql -R /usr/local/mysql/mysql_files  /data/mysql_data{1..3}

配置Mysql的配置文件/etc/my.cnf

[mysqld_multi]

mysqld = /usr/local/mysql/bin/mysqld

mysqladmin = /usr/local/mysql/bin/mysqladmin

log = /tmp/mysql_multi.log

[mysqld1]

datadir = /data/mysql_data1 #设置数据目录

socket = /tmp/mysql.sock1 #设置sock文件存放路径

port = 3306 #设置监听开放端口

user = mysql #设置运行用户

performance_schema = off #关闭监控

innodb_buffer_pool_size = 32M #设置innodb 缓存大小

bind_address = 0.0.0.0 #设置监听IP地址

skip-name-resolve = 0 #关闭DNS反向解析

[mysqld2]

datadir = /data/mysql_data2

socket = /tmp/mysql.sock2

port = 3307

user = mysql

performance_schema = off

innodb_buffer_pool_size = 32M

bind_address = 0.0.0.0

skip-name-resolve = 0

[mysqld3]

datadir = /data/mysql_data3

socket = /tmp/mysql.sock3

port = 3308

user = mysql

performance_schema = off

innodb_buffer_pool_size = 32M

bind_address = 0.0.0.0

skip-name-resolve = 0

初始化各个实例:初始化完后会在日志中生成密码,记得保存,一会要用

c72bc1081d393dfeae2090f817d8f54c.png

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data1

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data2

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql_data3

若缺失libaio

yum install -y libnuma

yum install -y libnuma.so.1

yum -y install numactl

ef192c3bd226fb58e0632bc8fa19ed24.png

复制多实例脚本到服务管理目录下

cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi

给予脚本可执行权限

chmod +x /etc/init.d/mysqld_multi

加入service服务管理

chkconfig --add mysqld_multi

添加环境变量

vim /etc/profile

export MYSQL_HOME=/usr/local/mysql

export PATH=${MYSQL_HOME}/bin:$PATH

92c76454873a54d5777d54ea182207de.png

使修改的配置文件生效

source /etc/profile

启动各个实例

mysqld_multi start

查看实例的监听端口

ss -tulpn|grep mysqld

连接数据库实例

连接实例1(主库):

mysql -S /tmp/mysql.sock1 -p 前面生成的密码

mysql> set password=password('123456');

mysql> flush privileges;

另外两个实例的操作方法与实例1一致,不再赘述。

允许远程连接mysql

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;

启动mysql多实例

启动时需要一个启动脚本,这个脚本一般在/usr/local/mysql/support-files目录下mysqld_multi.server,将这个脚本复制到init.d目录下

cp /usr/local/mysql/support-files/mysqld_multi.server /etc/rc.d/init.d/mysqld_multi

之后可以使用命令

/etc/rc.d/init.d/mysqld_multi start 1-3

启动三个MySQL实例,注意这里的数字和my.cnf中的[mysqldN]对应,1-3就是启动[mysqld1]、[mysqld2]、[mysqld3]配置段的MySQL实例。

查看端口有没有正常启动

netstat -ano | egrep "3307|3308|3306"

查看端口,看MySQL有没有正常启动,如果没有启动或报错,一般报错详细日志存在各个实例data目录下的 主机名.err文件中,打开此文件查找错误原因,逐步排错就可以了。

关闭多个MySQL实例

一般教程上关闭的命令是

/etc/rc.d/init.d/mysqld_multi stop 1-3

但是这个命令经常不起作用,所以一般我是用

killall -u mysql  或 kill -9 the-mysql-pid

配置主从复制

修改/etc/my.cnf

88b08514ffab3fbc9790d79d408e18cf.png

主数据库master 需要添加

log-bin=mysql-bin

server-id=1

另外两个从数据库slave1 slave2只需要添加

server-id=2

server-id=3

9c947cd5c43a999a7352eac8adb29dfa.png

关闭所有的mysql数据库并检查mysql数据的运行状态,重新运行所有的mysql数据

killall -u mysql

/etc/rc.d/init.d/mysqld_multi start 1-3

netstat -ano |egrep "3306|3307|3308"

d956105600651835970a8f57e317e149.png

打开master,输入密码,赋予从库权限账号,允许用户在主库上读取日志,赋予Slave机器有File权限,

mysql -S /tmp/mysql.sock1 -p

GRANT FILE ON *.* TO 'root'@'192.168.98.128' IDENTIFIED BY '123456';

GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.98.128' IDENTIFIED BY '123456';

FLUSH PRIVILEGES;

只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以

90013bc418adafc68dd23e2765c7a3ac.png

0c26504bcc862a724c5078d658201912.png

退出主库master,再次重启mysql,进入主库master,查看主库信息

show master status;

记住binlog文件和Position

aa2b4aeef1edd40da6065746dfa037e4.png

退出主库master,分别进入另外两台从库slave1 和slave2,并执行下面的操作

change master to master_host='192.168.98.128',master_user='root',master_password='123456',master_log_file='mysql-bin.000002', master_log_pos=154;

其中 master_host对应的是主库的ip地址.master_user和master_password是主库的帐号和密码,master_log_file则是在主库查询到的二进制文件的名称,从库会自动查询到这个文件,master_log_pos是日志的位置.

测试

接下来进行最后的测试,首先在主库创建一个数据库,如果从库能同样发现到该库的存在,则证明主从同步成功.

87919f6ed3ac808e60601eb9b1ec6c39.png

1240fdc46ef39cef5bd77a205f480123.png

测试成功,如果发现新增的数据库没有出现,请先重启从库slave,之后可以看到新增的数据库了.

PS:开放数据库访问端口和修改客户端登陆的密码

开放mysql的访问端口

/sbin/iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

保存修改

/etc/rc.d/init.d/iptables save

重启防火墙使其改动生效

/etc/init.d/iptables restart

由于的mysql5.7中user表没有password字段,所以5.7之前的版本使用navicat等客户端无法正常登陆mysql,请使用以下方法解决此问题

打开相应的数据库,执行此sql命令,修改对应的帐号和密码,即可远程访问

ALTER USER 'root'@'%' IDENTIFIED BY '123456';

总结

总算写完单服务器安装mysql多实例教程并实现了主从读写分离,真的不容易,查阅了官方安装文档和和结合网上的几篇的博客,花了不少时间来梳理,最后还是成功安装了,也可以把项目在服务器环境上跑起来了.之后会补上不同服务器上的mysql5.7数据库安装和实现主从读写分离的教程.

参考文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值