mysql-读写分离
在自己操作读写分离之前感觉应该不难,操作之中也确实不能,但是里面都是坑,一下我主要记录一下我做的时候遇到的那些坑。
1、准备好mysql安装包,请按照:https://www.jianshu.com/p/ea4accd7afb4 连接中的安装方式进行安装。安装完毕并修改完密码,顺便将data文件夹中的auto.cnf删除。
2、将安装好的赋值一份并修改名字。并按照下图将my.ini修改,同事删除清空data文件夹
3、如果两个服务都启动就算第一步结束了,可以配置读写分离,若两个服务起不来,那么按以下操作:
删除安装的mysql程序(安装包不要删除)。其中包括注册表信息和服务
删除注册表 :windows+R 输入regedit
删除:HKEY_LOCAL_MACHINE>SYSTEM>ControlSet001>Services>mysql
删除:HKEY_LOCAL_MACHINE>SYSTEM>CurrentControlSet>Services>mysql
删除服务:
windows+R 输入 cmd
命令窗口输入:sc delete 服务的名字
截止位置算是清空了所有mysql程序。在次进行安装并复制一份。
复制中的坑:my.ini里面的内容:请复制
主库的配置:
[Client] #设置3306端口 port = 3306 [mysqld] #设置3306端口 port = 3306 # 设置mysql的安装目录 basedir=F:\mysql-5.7.25-winx64 # 设置mysql数据库的数据的存放目录 datadir=F:\mysql-5.7.25-winx64\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #开启日志 log-bin=mysql-bin #设置服务id,主从不能一致 server-id=1 #设置需要同步的数据库 binlog-do-db=pawn #屏蔽系统库同步 binlog-ignore-db=mysql binlog-ignore-db=information_schema binlog-ignore-db=performance_schema
从库的配置:
[Client] #设置3306端口 port = 3308 [mysqld] #设置3306端口 port = 3308 # 设置mysql的安装目录 basedir=F:\mysql-5.7.25-winx64-fk # 设置mysql数据库的数据的存放目录 datadir=F:\mysql-5.7.25-winx64-fk\data # 允许最大连接数 max_connections=200 # 服务端使用的字符集默认为8比特编码的latin1字符集 character-set-server=utf8 # 创建新表时将使用的默认存储引擎 default-storage-engine=INNODB sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysql] # 设置mysql客户端默认字符集 default-character-set=utf8 [mysqld] #开启日志 log-bin=mysql-bin #设置服务id,主从不能一致 server-id=2 #设置需要同步的数据库 replicate_wild_do_table=pawn.% #屏蔽系统库同步 replicate_wild_ignore_table=mysql.% replicate_wild_ignore_table=information_schema.% replicate_wild_ignore_table=performance_schema.%
此时,你的主库可以启动服务,但是从库缺少启动服务入口,使用下面的命令
命令窗口进入从库中bin文件夹下,执行命令:mysqld install 服务名字 --defaults-file="my.ini的绝对路径";
此时进入"管理"中会发现你的从库服务,先别急着启动,你还要清空data文件夹(你自己的数据库的所有信息,里面以前有数据的话先备份)中的内容。
如果此时主库和从库都已经可以访问,那么需要使用sql语句进行主从关联
主库中执行:
-- 主库授权
#授权主备复制专用账号
GRANT REPLICATION SLAVE ON *.* TO 'db_sync'@'%' IDENTIFIED BY 'db_sync';
#刷新权限
FLUSH PRIVILEGES;
#确认位点 记录下文件名以及位点
show master status;
从库中执行:
STOP SLAVE;
CHANGE MASTER TO master_host = 'localhost', master_user = 'db_sync', master_password = 'db_sync', master_log_file = 'mysql‐bin.000002', master_log_pos = 154;
START SLAVE;
show slave status;
完成后,如果执行完毕你需要关注
从库中一下状态是否与主库一直,并且slave_IO_running slave_sql_running 是否是 Yes ,如果都没问题(主从库中my.ini中的同步数据确认好,主库和从库一定是提前创建好表),那么你就可以再主库中插入数据啦,刷新从库是否同步。