Windows Server 2019 Mysql8.0.35 安装及主从备份
查询你设置的ID,如果发现这个ID和你之前设置的不一样的话,还是在my.ini文件中搜索并确保设置的server-id是唯一的。如果还不行的话,用全局搜索电脑中的配置文件,看看是不是在别的地方也有my.ini设置冲突了。分析:这个想必不用多说了,建这个用户的目的就只是为了复制主服务器的数据,另外你可以看一下主服务器MySQL数据库下的user表中你刚刚新建的用户是不是只有一个数据项是Y(开启),而
一、下载mysql-8.0.35-winx64.zip
进入MySQL官网,在地址栏中输入地址:https://dev.mysql.com/downloads/mysql/
二、解压缩mysql-8.0.35-winx64.zip
将下载的mysql-8.0.35-winx64.zip,解压复制到 C:\work\ 工作目录中
三、新建data文件夹
在“C:\work\mysql-8.0.35-winx64”文件夹中新建data文件夹。
四、配置my.ini初始化文件
在“C:\work\mysql-8.0.35-winx64”文件夹中新建记my.ini文档
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=C:\work\mysql-8.0.35-winx64
# 设置mysql数据库的数据的存放目录
datadir=C:\work\mysql-8.0.35-winx64\Data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password
#主服务器唯一ID,与主库不能相同
server-id=2
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
port=3306
default-character-set=utf8mb4
五、安装MySQL
以管理员身份运行CMD应用程序,进入到 C:\work\mysql-8.0.35-winx64\bin 目录下;
输入命令:mysqld --initialize –console ,完成MySQL的初始化。
输入命令:mysqld --install,完成MySQL服务的安装。
若MySQL服务提示已存在,可通过命令:sc delete mysql,将已存在服务删除。
输入命令:net start mysql,完成MySQL服务的启动。
输入命令:mysql -u root -p,再输入初始化生成的初始密码。
输入命令:ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘mm123456’;
输入命令:net stop mysql,完成MySQL服务的停止工作。
六、配置环境变量

七、主从配置
1.修改主数据库配置my.ini文件,在[mysqld]下添加或修改这些参数,配置完之后需要重启Mysql服务
#主服务器唯一ID,与主库不能相同
server-id=1
#启用二进制日志
log-bin=master-bin
#设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
#设置需要复制的数据库
binlog-do-db=agv-scheduling-system
#设置binlog格式,MIXED,ROW,STATEMENT
binlog_format=STATEMENT
2.修改从数据库配置my.ini文件,在[mysqld]下添加或修改这些参数,配置完之后需要重启Mysql服务
#服务器唯一ID,与主库不能相同
server-id=2
#设置不要复制的数据库(可设置多个)
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
#设置需要复制的数据库
#replicate_wild_do_table=test.%
replicate-do-db=agv-scheduling-system
server-id要确保在主从服务器的my.ini中这个参数都是唯一的并且主从的ID不能相同
3. 在连接主数据库的客户端内
#创建用户,
CREATE USER 'backup_user'@'192.168.63.130' IDENTIFIED BY '123456';
#授权用户复制的权限(从服务器ip)
GRANT REPLICATION SLAVE ON *.* TO 'backup_user'@'192.168.63.130';
#刷新权限
FLUSH PRIVILEGES;
#显示二进制文件信息
show master status;
4. 在连接从数据库的客户端内
#master_host 主数据库地址
CHANGE MASTER TO master_host ='192.168.63.1',
#设置主数据库的端口号
master_port=3306,
#上一步中主数据库创建的从库用户
master_user ='backup_user',
#上一步中主数据库创建的从库密码
master_password ='123456',
#上一步中保存的file
master_log_file ='logbin.000004',
#上一步中保存的position
master_log_pos = 626;
#开启主从复制
start slave;
#显示从服务器复制状态
show slave status;
#停止从服务
# STOP SLAVE;
#重置从服务
# RESET SLAVE;
主要检查以下图中的值是否为yes,否则有错,可以检查其错误提示
错误提示:

例:Last_IO_Error = Error connecting to source 'backup_user@192.168.63.1:3306'. This was attempt 1/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
这个错误提示表明在连接到主服务器时遇到了身份验证问题。其中报错信息 "Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection." 表示主服务器要求使用安全连接进行身份验证,而当前的连接不符合安全要求。
解决方法:将主数据库中的用来操作备份的用户身份验证由caching_sha2_password改成mysql_native_password,命令如下
ALTER USER 'backup_user'@'192.168.63.1' IDENTIFIED WITH mysql_native_password BY 'your_password';
八、配置详解
2.1相同的配置参数:
server-id确保在主从服务器的my.ini中这个参数都是唯一的并且主从的ID不能相同
2.2仅主服务器:以下配置只能在主服务器上配置
1.log-bin
启用二进制日志,这个名字就是生成二进制文件的名字,从数据库也主要是依靠这个文件来解析主服务器进行的数据库操作,名字命名确保可读性就行
2.binlog-ignore-db
用于指定主服务器上要忽略写入二进制日志的数据库,一般用来忽略Mysql原有的数据库,可以在配置中同时写多个,也可以在一行中写多个数据用逗号分割例如:
binlog-ignore-db=mysql,information_schema,performance_schema
3.binlog-do-db
用于指定主服务器上要写入二进制日志的数据库,这个参数告诉主服务器只将指定的数据库的更改写入到二进制日志中。这个也可以配置多个同2
说明:2和3同时设置的时候以binlog-ignore-db为准,除了这里设置的数据库之外,其他数据库的操作都会被同步到二进制日志中
4.binlog_format
它有三个可选值:STATEMENT、ROW和MIXED。每个值适用于不同的情况,并具有各自的优缺点。
1).STATEMENT格式:
适用情况:适用于大多数简单的查询和事务,特别是在没有涉及非确定性函数(如NOW())和存储过程的情况下。
优点:
生成的binlog较小,占用较少的磁盘空间。
查询在从服务器上执行时,可以减少网络传输的数据量。
缺点:
对于某些情况下的非确定性函数和存储过程,可能会导致主从数据不一致。
无法复制使用了非确定性函数的语句,从服务器上的结果可能与主服务器不一致。
2).ROW格式:
适用情况:适用于复杂的查询和事务,包括使用了非确定性函数和存储过程的情况。
优点:
生成的binlog可以精确地记录每一行数据的变化,可以确保主从数据的一致性。
从服务器上执行查询时,不会受到非确定性函数和存储过程的影响。
缺点:
生成的binlog较大,占用更多的磁盘空间。
在复制过程中,需要传输更多的数据量到从服务器。
3).MIXED格式:
适用情况:适用于大多数情况,尤其是在既有简单查询又有复杂查询的混合环境中。
优点:
根据具体的查询类型自动选择STATEMENT或ROW格式,以获得最佳的性能和数据一致性。
在大多数情况下,生成的binlog较小,占用较少的磁盘空间。
缺点:
对于某些情况下的非确定性函数和存储过程,可能会导致主从数据不一致。
2.3仅从服务器(仅能在从服务器上配置)
1.replicate-do-db
replicate-do-db=db1,db2,db3:表示只复制数据库db1、db2和db3的操作。
2.replicate-ignore-db
replicate-ignore-db=db4,db5:表示忽略不复制数据库db4和db5的操作。
3.replicate_wild_do_table
replicate_wild_do_table=db1.table1,db2.table2:表示只复制数据库db1中的表table1和数据库db2中的表table2的操作。
4.replicate_wild_ignore_table
replicate_wild_ignore_table=db3.%:表示忽略不复制数据库db3下所有表的操作。
说明:以上这四个配置在从数据库可以同时存在,按需选择即可,其中3和4可以使用%通配符选择数据库下的所有表,使用时尽量避免重复的设置
5.relay-log
relay-log=copy-log
一般不需要设置,服务器会自动创建并使用与主服务器相同的中继日志文件。如果想改从服务器中二进制文件的名字的话可以设置
主要用于设置从服务器的中继日志文件的名称和位置,就是从数据库将读到的主数据库的二进制日志转化为自己的日志文件,然后解析relay-log并执行sql语句。
3.目前遇到过的问题
3.1Slave_IO_Running一直显示connecting
分析:当你配置完成就遇到Slave_IO_Running或Slave_SQL_Running显示Connecting或者NO,只要是不为yes的情况,一般都是因为my.ini文件配置有误,也可能是ip不通。问就是乌龟的屁股
解决:一定要分清楚主服务器和从服务器的配置。检查配置文件以及当时执行的sql命令中的用户名、密码、主服务器ip、授权复制的ip(从服务器ip),检查ip是不是不通,检查主服务器的防火墙是否允许Mysql的的端口通过。
3.2配置完成后一开始是双yes,后来SLave_IO_State显示Waiting for master to send event并且Slave_SQL_Running显示NO
分析:这种情况的话主从复制是已经设置好了,但是因为你插入数据的表是在你开启主从复制之前建的,当你执行插入操作的时候二进制文件只有insert或者update语句并没有create table 的语句,所以从服务器在读取二进制文件时是无法读到你之前的建表语句的。另外执行“show slave status”命令后
仔细观察的话会看到last_error提示Error 'Table '数据库.表名' doesn't exist' on query. Default database: '数据库'. Query: 'INSERT INTO `数据库`.`表名`(`**`) VALUES (**)'
解决:手动导出建表的SQL语句,并在从服务器执行该SQL语句,建表之后再进行插入或者更新操作就好了。
3.3last_error中提示Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
分析:翻译过来就是主从服务器的id相同,该处的id就是在my.ini配置文件中设置的id
解决:用MySQL命令行或者在可视化工具中执行SELECT @@server_id;查询你设置的ID,如果发现这个ID和你之前设置的不一样的话,还是在my.ini文件中搜索并确保设置的server-id是唯一的。如果还不行的话,用全局搜索电脑中的配置文件,看看是不是在别的地方也有my.ini设置冲突了。
补充:非免安装的MySQL在windows环境下的一般是以C:\ProgramData\MySQL\MySQL Server X.X\目录下的my.ini文件为准。
3.4用新建的账户连接mysql时提示Host "WIN-M8D74IVFLTB is not allowed to connect to this MySQL server(新建的用户无法登陆)
分析:这个想必不用多说了,建这个用户的目的就只是为了复制主服务器的数据,另外你可以看一下主服务器MySQL数据库下的user表中你刚刚新建的用户是不是只有一个数据项是Y(开启),而且这个用户和你之前正常建的用户共享的是相同的数据,所以不用想太多,用正常的用户登录进行建表,增删改查就行。
解决:为了满足你们热爱钻研的精神,执行SHOW GRANTS FOR 'username'@'hostname'可以查看目标用户已经被授权的权限,执行GRANT ALL PRIVILEGES ON database.* TO 'username'@'hostname';这个命令可以授予用户所有的权限。
3.5如果想用其他的ip和主服务器进行主从复制
一种方法是在主服务器上只用重新添加新用户,另外新的从服务器上也得重新配置;另外一种在主服务器上设置相对简单,在主服务器上只用选中mysql数据库并执行这句话设置所有ip都可以访问这个用户update user set host='%' where user ='username' ,从数据库还是和之前一样配置。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)