环境
- 系统:Windows 10
- MySQL版本:mysql-8.0.16-winx64.zip
数据库安装
数据库主要配置
| Role | Host | Port | Service Name | Server ID | | —- | —- | —- | —- | —- | | 主 | 192.168.1.48 | 3306 | MySQL | 1 | | 从 | 192.168.1.48 | 3307 | MySQL2 | 2 |
下载解压
官网下载mysql-8.0.16-winx64.zip文件,分别解压两份到D盘,一个master数据库,一个slave数据库。文件夹重命名mysql-master和mysql-slave。
主库配置安装
在mysql-master文件夹下新建数据文件夹data和配置文件my.ini。
my.ini内容如下:
[mysqld]# 服务器IDserver-id=1# 设置3306端口port=3306# 设置mysql的安装目录basedir=D:\mysql-master# 设置mysql数据库的数据的存放目录datadir=D:\mysql-master\data# 允许最大连接数max_connections=2048# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=100# 服务端使用的字符集默认为UTF8character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password[mysql]# 设置mysql客户端默认字符集default-character-set=utf8mb4[client]# 设置mysql客户端连接服务端时默认使用的端口port=3306default-character-set=utf8mb4
然后cmd进入D://mysql-master//bin文件下,执行相关数据库创建脚本
a.初始化数据库
mysqld --initialize --console
b.安装MySQL的Windows服务
mysqld install MySQL
c.启动MySQL的Windows服务
net start MySQL
全部脚本如下
Dmysql-masterbinmysqld --initialize --console2019-05-16T042905.557091Z 0 [System] [MY-013169] [Server] Dmysql-masterbinmysqld.exe (mysqld 8.0.16) initializing of server in progress as process 67882019-05-16T042927.927342Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost kC-t+pB,472019-05-16T042936.050461Z 0 [System] [MY-013170] [Server] Dmysql-masterbinmysqld.exe (mysqld 8.0.16) initializing of server has completedDmysql-masterbinmysqld install MySQLService successfully installed.Dmysql-masterbinnet start MySQLMySQL 服务正在启动 ...MySQL 服务已经启动成功
从库配置安装
在mysql-slave文件夹下新建数据文件夹data和配置文件my.ini。
my.ini内容如下:
[mysqld]# 服务器IDserver-id=2# 设置3306端口port=3307# 设置mysql的安装目录basedir=D:\mysql-slave# 设置mysql数据库的数据的存放目录datadir=D:\mysql-slave\data# 允许最大连接数max_connections=2048# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=100# 服务端使用的字符集默认为UTF8character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password[mysql]# 设置mysql客户端默认字符集default-character-set=utf8mb4[client]# 设置mysql客户端连接服务端时默认使用的端口port=3307default-character-set=utf8mb4
重要的不同点就是server-id和port,主库和从库的server-id一定是要不同,因为本次实验是在同一台主机上的所以port端口号的值也要不同。
然后cmd进入D:\mysql-slave\bin文件下,执行相关数据库创建脚本
a.初始化MySQL从库
mysqld --initialize --console
b.安装MySQL从库的Windows服务
mysqld install MySQL2
c.启动MySQL从库的Windows服务
net start MySQL2
全部脚本如下
mysqld.exe --initialize --console2019-05-16T054852.398955Z 0 [System] [MY-013169] [Server] Dmysql-slavebinmysqld.exe (mysqld 8.0.16) initializing of server in progress as process 75962019-05-16T054914.934147Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost PjeLMhvjK2t2019-05-16T054923.777319Z 0 [System] [MY-013170] [Server] Dmysql-slavebinmysqld.exe (mysqld 8.0.16) initializing of server has completedmysqld install MySQL2Service successfully installed.net start MySQL2MySQL2 服务正在启动 ...MySQL2 服务已经启动成功。
可以看到数据库root用户的初始密码为PjeLMhvjK2t
主从配置
主节点(master)配置
创建用户
#进入mysqluse mysql;#创建用于复制操作的用户create user 'test123'@'192.168.1.48' identified with mysql_native_password by 'test123';#授权GRANT REPLICATION SLAVE ON *.* TO 'test123'@'192.168.1.48';#刷新授权表信息FLUSH PRIVILEGES;
锁住主库,使其只能读不能写数据
flush tables with read lock;
获取主库当前binary log文件名和位置(position)
use mysql;SHOW MASTER STATUS;
执行结果
+---------------+----------+--------------+------------------+-------------------+File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set+---------------+----------+--------------+------------------+-------------------+binlog.000001 1255+---------------+----------+--------------+------------------+-------------------+
File的值就是下面在从表操作时,设置主节点的master_log_file要设置的值。
备份数据库
mysqldump -uroot -p123456 testdb > c:\\20090219.sql
从节点(slave)配置
创建数据库
create database testdb
还原数据库
mysql -uroot -p123456 testdb < c:\\20090219.sql
同步主库设置
use mysql;#在从(Slave)库上设置主节点参数change master to master_host='192.168.1.48',master_port=3306,master_user='test123',master_password='test123',master_log_file='binlog.000001',master_log_pos=0;#开启主从同步start slave;#再查看主从同步状态show slave status;
主节点解锁
# 解锁unlock tables;
主要看Slave_IO_Running 和 Slave_SQL_Running这两个字段的值,如果都是yes,则同步成功。
问题
Slave failed to initialize relay log info structure from the repository
错误异常
mysql> start slave;ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
解决方法
slave reset执行候做了这样几件事:
1、删除slave_master_info ,slave_relay_log_info两个表中数据;
2、删除所有relay log文件,并重新创建新的relay log文件;
3、不会改变gtid_executed 或者 gtid_purged的值
mysql> reset slave;mysql> change master to ......mysql> start slave;
主库创建表后,从库状态168 异常
Error ‘Got error 168 - ‘Unknown (generic) error from engine’ from storage engine’
原因分析
解决方法
在数据库配置文件里添加以下数据库引擎和字段字符集的默认配置
[mysqld]# 服务端使用的字符集默认为UTF8character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB
