最近在学习用Spring Aop来实现数据库读写分离的功能。 在编写代码以前,首先是要部署好mysql的环境,由于要实现读写分离,因此至少须要部署两个mysql实例,一主一从,而且主从实例之间可以自动同步,由于个人本机内存并不高,因此就打算在windows上直接搭建mysql的主从实例(不想开虚拟机),但这个过程当中却遇到了一些麻烦,虽然最后都解决了,但也花费了很多的时间。为了不之后在一样的事情上浪费时间,同时也方便读者们能复制相同的场景,因此就写下这篇博客来记录一下搭建环境的过程。mysql
本机地址:127.0.0.1(localhost)sql
mysql版本:mysql-5.7.28-winx64数据库
主库服务名:master,端口3307windows
从库服务名:slave,端口3308缓存
首先是下载mysql,直接到官网下载zip版的安装包,这里建议下载比较新的版本,好比笔者的版本是5.7,这也是网上不少大神的建议,bash
解压安装包,命名文件夹为master,进入文件夹,建立一个名为my.ini的空文本, 工具
[client]
# 端口号,默认是3306,同一个环境下不一样的mysql实例端口号不能相同
port=3307
default-character-set=utf8
[mysqld]
#主库配置
server_id=1
log_bin=master-bin
log_bin-index=master-bin.index
# 设置为本身MYSQL的安装目录
basedir=D:/software/mysql/master
# 设置为MYSQL的数据目录,data文件夹由mysql自动生成
datadir=D:/software/mysql/master/data
port=3307
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
# 开启查询缓存
explicit_defaults_for_timestamp=true
复制代码
ps:配置内容中的目录地址要用斜杠,不能用反斜杠,不然等下安装服务会报错找不到目录。学习
一、cmd管理员身份运行,进入master的bin目录下,ui
mysqld --initialize --user=mysql --console
复制代码
若是出现相似下面的提高就显示初始化成功,初始化成功会系统自动生成data文件夹,并生成初始密码, spa
mysqld --install master --defaults-file="D:\software\mysql\master\my.ini"
复制代码
master为服务的名称,--defaults-file为ini文件的路径,出现"Service successfully installed."即为成功
正常来讲,安装完master的服务后咱们就能够启动mysql了,然而这里有个坑,就是直接mysql后会报错,由于咱们还少配置了一个地方,就是注册表中master服务的信息。
四、修改注册表
按win+R,在弹框中输入regedit打开注册表,找到master服务,路径是HKEY_LOCAL_MACHINE–>SYSTEM–>CurrentControlSet–>Services–>master,修改ImagePath为
D:\software\mysql\master\bin\mysqld --defaults-file=D:\software\mysql\master\my.ini master
复制代码
路径就对应本身安装的master数据库文件夹便可。
五、启动服务
依然是在bin目录下执行启动服务,命令是net master start
,启动成功后会出现以下的提示:
进入mysql的命令是:mysql -u root -p ,但由于咱们改了端口号,因此命令要改成
mysql -u root -P3307 -p,而后输入刚才生成的初始化密码便可进入mysql,
set password=password('新密码');
复制代码
例如LZ设置的密码为123456,
从库的安装步骤和主库同样,只是my.ini中修改对应的配置便可。
[client]
port=3308
default-character-set=utf8
[mysqld]
#从库配置
server_id=2
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
# 设置为本身MYSQL的安装目录
basedir=D:/software/mysql/slave
# 设置为MYSQL的数据目录
datadir=D:/software/mysql/slave/data
port=3308
character_set_server=utf8
sql_mode=NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER
#开启查询缓存
explicit_defaults_for_timestamp=true
复制代码
两个库都安装好了,咱们就能够来操做主从库之间的关联,实现主从之间的复制,
先登陆主库,输入 show master status;
登陆从库,执行下面的命令,
change master to master_host='127.0.0.1',master_port=3307,master_user='root',master_password='123456',master_log_file='master-bin.000001',master_log_pos=0;
复制代码
不难看出上面都是主库的配置信息,成功后执行命令start slave
开启主从复制
值得说明的是,由于两个库只是作了单向关联,若是往从库中写数据的话,主库是没法同步的。因此从库只能用于读取数据,而主库既能写,也能读,固然,多数状况都是用于写数据,读取数据通常都是从库获取,这样能有效减轻主库的压力,也就是咱们常说的读写分离。