隐藏

mysql主从环境搭建(windows一主两从)

发布:2023/4/16 0:37:37作者:管理员 来源:本站 浏览次数:439

目录


一.主库配置


二.数据复制


三.从库配置


四.从库宕机解决方案


五.从库误删数据


六.主库宕机


一.主库配置


1.修改主库my.ini


   [mysql]

   # 设置mysql客户端默认字符集

   default-character-set=utf8

   [mysqld]

   # skip-grant-tables

   group_concat_max_len=102400

   #设置3306端口

   port = 3306

   # 设置mysql的安装目录  

   basedir=D:\DataBase\mysql

   # 设置mysql数据库的数据的存放目录  

   datadir=D:\DataBase\mysql\data  

   # 允许最大连接数  

   max_connections=1000  

   # 服务端使用的字符集默认为8比特编码的latin1字符集  

   character-set-server=utf8  

   # 创建新表时将使用的默认存储引擎  

   default-storage-engine=INNODB

   sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

   

   # Server Id.数据库服务器id,这个id用来在主从服务器中标记唯一mysql服务器

   server-id=1

   #默认不开启二进制日志,需要配置

   log-bin=mysql-bin

   #设置需要同步的数据库

   binlog-do-db=nctest_zj

   #屏蔽系统库同步

   binlog-ignore-db=mysql

   binlog-ignore-db=information_schema

   binlog-ignore-db=performance_schema


2.打开cmd,登录主库(或者navicat,连接主库,打开命令列)


mysql -u root -p


3.授权主从复制专用账号


mysql> GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' IDENTIFIED BY 'by123456';


4.刷新权限


msyql> flush privileges;


5.查询主库信息,记录下文件名和position


msyql> show master status;


二.数据复制


1.设置主库只读,避免新增修改数据


   set global read_only=1;

   flush tables with read lock;


2.复制数据


3.恢复第一步的设置


   unlock tables;

   set global read_only=0;


三.从库配置


1.打开从库my.ini


server-id 不可以和主库一样


   [mysql]

   # 设置mysql客户端默认字符集

   default-character-set=utf8

   [mysqld]

   # skip-grant-tables

   group_concat_max_len=102400

   #设置3306端口

   port = 3306

   # 设置mysql的安装目录  

   basedir=D:\DataBase\mysql

   # 设置mysql数据库的数据的存放目录  

   datadir=D:\DataBase\mysql\data  

   # 允许最大连接数  

   max_connections=1000  

   # 服务端使用的字符集默认为8比特编码的latin1字符集  

   character-set-server=utf8  

   # 创建新表时将使用的默认存储引擎  

   default-storage-engine=INNODB

   sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

   

   # Server Id.数据库服务器id,这个id用来在主从服务器中标记唯一mysql服务器

   server-id=2

   #默认不开启二进制日志,需要配置

   log-bin=mysql-bin

   #设置需要同步的数据库

   replicate_wild_do_table=nctest_zj.%  

   #屏蔽系统库同步

   replicate_wild_ignore_table=mysql.%

   replicate_wild_ignore_table=information_schema.%

   replicate_wild_ignore_table=performance_schema.%

   


2.cmd登录从库,或者navicat打开命令列


3.根据主库的文件名和position,配置从库信息


CHANGE MASTER TO MASTER_HOST='192.168.1.15',MASTER_PORT=3306,MASTER_USER='root', MASTER_PASSWORD='root',MASTER_LOG_FILE='mysql-bin.000039',MASTER_LOG_POS=47257;


4.启动服务


   # 开启

   mysql> start slave

   # 停止

   mysql> stop slave

   # 重启

   mysql> reset slave


5.查看从库状态


mysql>show slave status\G


保证下面两个值是yes则主从配置成功,如果有一个为no则需要查看日志定位原因。


(show variables like 'log_error';)去相应的目录查看日志


6.为从库创建用户,配置只读权限


   create user nymi identified by 'by123456';

   grant select on *.* to nymi@'%' ;

   flush privileges;


项目中用此用户连接数据库,避免用从库的root用户修改数据导致主从复制失效。

四.从库宕机解决方案


重启后,一般来说会继续mysql停止时的position继续同步。


如果主从复制失效,则重新配置走以下步骤


主库:


   show variables like 'log_error';

   查看日志中的position,


从库


   stop slave;

   CHANGE MASTER TO MASTER_HOST='192.168.1.15',MASTER_PORT=3306,MASTER_USER='root', MASTER_PASSWORD='root',MASTER_LOG_FILE='file信息',MASTER_LOG_POS=Position信息;

   (file信息来自 主库中的 show master status;)

   start  slave;


思路就是找到正常的一个节点,进行数据同步

五.从库误删数据


1.项目用只读用户连接从库,避免误删


2.恢复误删数据,然后按照第四步解决


3.重新同步数据,按照第三步解决

六.主库宕机


1.重启主库,查看从库状态


2.若未解决,则主库从库分别执行以下语句,将主库语句查到的文件名和position在从库重新指定


show master status;


   stop slave;

   CHANGE MASTER TO MASTER_HOST='192.168.1.15',MASTER_PORT=3306,MASTER_USER='root', MASTER_PASSWORD='root',MASTER_LOG_FILE='file信息',MASTER_LOG_POS=Position信息;

   start  slave;