大家好我是霜华
数据库集群应该是目前业务中必备的了,毕竟封装的再好的单个数据库在高QPS情况下是真撑不住
虽然说我们学生或者是非一线互联网很难亲身见到高QPS的系统,但是我觉得作为一个好的程序员
写的每一行代码都应该是你能力内最优化的,做的每一次架构是你能力内承载最大的
只有突破舒适圈我们才有进步,单纯的做CRUD那编程可能失去了它本来的魅力。
今天花了一上午与各路搜各种资料去在本地搭建主从数据库,在这里我介绍下搭建主从数据库的流程
对于一个非科班学生,不得不感慨自学这条路是真的困难
走过的自闭数不胜数
但毕竟技术人嘛,锻炼解决问题的能力也能力之一
创建两个mysql 服务器,
我第一个使用的是msi,第一个直接装在了c盘的programe file文件夹里
第二个用的是zip 解压在了d盘的slaveMysql文件夹里
c盘中有个隐形文件夹,叫ProgramData 你 msi 装的mysql配置包实际在这里:
我们需要把Data Uploads my.ini 三个文件copy到d盘的从数据库所在文件夹
主数据库配置文件更改:
我们需要改programData文件夹里面的mysql配置
如果是你安装时候的默认文件夹他也有配置文件不过配置信息不全,就算改了可能也没用
这个你自己安装的配置文件里它的配置信息并不全,
据我了解它应该是programData文件夹里面的是真身源文件,你自己安装路径下的文件只是映射
这里你有可能会出现需要以管理员身份才能更改文件,这时候需要设置权限
1点击文件夹属性,安全栏
2编辑
给用户修改和写入的权限,应用确定就能更改需要管理员权限才能处理的文件。
配置主数据库信息
点击my.ini进行配置
在[mysqld]
这行字后面你会看到#serverid这栏
更改它的服务id
以及加上后面的配置
配置说明:
server_id=101 //设置server_id,同一局域网中需要唯一
binlog-ignore-db=mysql// 指定不需要同步的数据库名称
log-bin=mall-mysql-bin// 开启二进制日志功能
binlog_cache_size=1M// 设置二进制日志使用内存大小(事务)
binlog_format=mixed// 设置使用的二进制日志格式(mixed,statement,row)
expire_logs_days=7// 二进制日志过期清理时间。默认值为0,表示不自动清理。
slave_skip_errors=1062//跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
配置后:
重启Mysql服务:
右键就能看到栏
启动主数据库客户端链接
-P是指服务的端口号
创建数据同步用户:
转了文件后我们还没有更改配置并把它设置为一个mysql服务
更改配置文件:
1.改端口
server_id=102\设置server_id,同一局域网中需要唯一
binlog-ignore-db=mysql\ 指定不需要同步的数据库名称
log-bin=mall-mysql-slave1-bin\ 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
binlog_cache_size=1M\设置二进制日志使用内存大小(事务)
binlog_format=mixed\ 设置使用的二进制日志格式(mixed,statement,row)
expire_logs_days=7 \二进制日志过期清理时间。默认值为0,表示不自动清理。
slave_skip_errors=1062\ 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
relay_log=mall-mysql-relay-bin \relay_log配置中继日志
log_slave_updates=1\ log_slave_updates表示slave将复制事件写进自己的二进制日志
read_only=1\slave设置为只读(具有super权限的用户除外)
安装服务:
打开管理员命令窗口
cd D:\mysql\mysql-5.7.20-winx64\bin 进入bin文件夹
.\mysqld --install slaveMysql 注册slaveMysql服务名的服务
在任务管理器中开启对应的服务
在从数据库客户端进行主从配置
change master to master_host='localhost', master_user='slave', master_password='123456', master_port=9999, master_log_file='mall-mysql-bin.000007', master_log_pos=371, master_connect_retry=30;
查看主从状态
show slave status \G
其中:
Slave_IO _Running :NO
Slave_SQLRunning :NO
表示还没开始同步。
在从客户端开启主从同步
start slave;
可能会出现两个问题:
问题一
The slave I/O thread stops because master and slave have equal MySQL server UUIDs
这个问题在show slave status \G 报错 主从使用了相同的ID
首先1:
主从server_id是否相同://这是之前在配置文件里配置的
用:
show varialbes like 'server_id';
如果不相同找其他问题
二检查server-UUID 是否一样 //在配置文件中能看到
应该很有可能是这个问题:
如果一样。关掉从数据库服务这里找到auto.cnf文件删掉
再启动数据库,会生成新的UUID和auto.cnf
这样UUID的问题就解决了
问题二:
Got fatal error 1236 from master when reading data from binary log: ‘Client requested master to start replication from position > file size’
//这时候是因为你之前改bug文件动了的原因
在从服务客户端重新解除主从关系再配置主从就ok
解开主从关系
change master to master_host='localhost', master_user='slave', master_password='123456', master_port=9999, master_log_file='mall-mysql-bin.000007', master_log_pos=371, master_connect_retry=30;
文章参考:
https://mp.weixin.qq.com/s/eEWMSTAUF1H-gFBx26jujw
MySql主从复制,从原理到实践! 三太子敖丙