近期做了个项目,要求数据库做个主从复制(因为读多写少,不用中间件),现在把相关步骤和命令写下来,免得自己以后老是忘记、丢三落四的。
另外下面的说到的主库也就是写库,从库也就是读库,在这里只演示一写一从的例子,一写多读的,可以根据自己的需求安装多个从库(必须在配置前复制多个从库)
首先做准备工作:
下载mysq集群版(https://dev.mysql.com/downloads/file/?id=473605),我用的是mysql-installer-community-5.7.20.0.msi(开发环境用的,生产服务器改用linux版的)。
确保开发服务器上没有安装过mysql,如果有则先卸载或
用命令.\Mysqld.exe remove mysql(你的mysql服务名)
现在开始安装:
安装主mysql
运行mysql-installer-community-5.7.20.0.msi,next, 选择Custom,我选的是-x64
选中选择的-x64版本,会在右下方有个“Advanced Options”选项,可以修改安装路径,分别是软件的安装路径和数据的存储路径,
我的mysq修改为D:\mysql\MySQLServer5.7 和 D:\mysql\MySQLServer5.7\data
然后一路next,如下图(一定要选择最下面的高级选项)
还是next,
还是next,
还是next,下图是最关键的一步,如图,
最后next 并执行安装。
确认是否安装成功,打开服务,搜索“MySQL-3306”,是否能正常开启和停止,或者用客户端访问下。安装从Mysql
复制刚才安装的MySQLServer5.7,重命名为MySQLServer5.7-3307
打开D:\mysql\MySQLServer5.7-3307\logs,清空里面的log,
进入D:\mysql\MySQLServer5.7-3307\data,将里面的日志文件删除,注意auto.cnf不能删打开D:\mysql\MySQLServer5.7-3307\data\my.ini
修改里面的内容:
所有3306 改为 3307
里面的所有的MYSQL-3306 替换为 MYSQL-3307
server-id改为101吧
数据路径修改为datadir=D:/mysql/MySQLServer5.7-3307/data/Data
日志路径,也要相应的修改。
修改D:\mysql\MySQLServer5.7-3307\data\Data\auto.cnf
server-uuid=3b151ba9-bfa9-11e7-9156-34e6d7fe412f 随便改里面一个数字,别和“主MYSQL”重复就行。
最后启动从mysql,打开cmd,进入D:\mysql\MySQLServer5.7-3307\bin,在bin下执行.\mysqld.exe install MySQL-3307 –defaults-file=”d:\mysql\MySQLServer5.7-3307\data\my.ini” 如图:
(注意前面有个“.”,表示在当前目录下执行)
执行成功会有“Service successfully installed.”提示,
然后进入系统服务,手动启动服务“MySQL-3307”。
多个从库的,可以再次执行上面的步骤“2. 安装从Mysql”
主从配置
注意事项: DB版本一致;数据库一致;最好都用innoDB存储引擎;主DB开启二进制日志;主、从的server-id 要唯一;
在主库新建数据库HW5002(字符集utf-8),里面创建你的表结构,
然后导出该库HW5002.sql,
在从库也创建相同的库HW5002(字符集utf-8),将HW5002.sql导入。重点来了
a) 现在开始配置主库:
打开主库的my.ini文件,在最下面追加
binlog-do-db=HW5002
#指定需要同步的数据库,如果不指定,则全部复制。
然后在主库下运行命令SHOW MASTER STATUS
执行结果如图
一会儿下面要用这个查询结果Postition#这个就是从库需要从主库的这个Position位置开始复制。
主库给从库创建一个同步用户slave001,密码123456并授权,命令如下:GRANT REPLICATION SLAVE ON . TO ‘slave001’@’127.0.0.1’ identified by ‘123456’;
flush privileges;
b)现在配置从库:
修改从库的my.ini文件,
确保server-id 不与主库重复,这里我设置server-id =101
然后,在从库执行如下命令:
CHANGE MASTER TO
master_host=’127.0.0.1’,
master_user=’slave001’,
master_password=’123456’,
master_port=3306,
master_log_file=’mysql-bin.000003’, #上面查询
master_log_pos=11737076;#上面查询
执行完后,执行启动slave命令:START SLAVE;
查看同步slave是否成功命令:SHOW SLAVE STATUS;
如果得到如下图所示都为YES则同步设置成功
验证
在主库INSERT/UPDATE一条数据,然后在从库查看是否也有 一条同样的数据。以上大功告成。