windows mysql8 Master Slave 离线包安
下载mysql8 https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.26-winx64.zip
配置
准备配置文件 my.ini,存放于mysql根目录下
[mysqld]
开启二进制日志
log-bin=mysql-bin
设置server-id
server-id=1
read-only=1 #从服务器添加此,设置数据库只读
设置3311端口
port=3311
自定义设置mysql的安装目录,即解压mysql压缩包的目录
basedir=D:\Server\mysql-Master
自定义设置mysql数据库的数据存放目录
datadir=D:\Server\mysql-Master\data
允许最大连接数
max_connections=200
允许连接失败的次数,这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
服务端使用的字符集默认为UTF8
character-set-server=utf8
创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
设置mysql客户端默认字符集
default-character-set=utf8
[client]
设置mysql客户端连接服务端时默认使用的端口和默认字符集
port=3311
default-character-set=utf8
复制Mysql程序为三份,分别命名为Master,Slave1,Slave2
修改My.ini文件端口号分别为 3311,3312,3313
Server-id 分别设置为 1,2,3
Master重启mysql,创建用于同步的用户账号
创建用户
CREATE USER 'repl'@'%' IDENTIFIED BY 'slavepass';
分配权限
GRANT REPLICATION SLAVE ON . TO 'repl'@'%';
刷新权限
flush privileges;
查看master状态,记录二进制文件名(mysql-bin.000003)和位置(73):
SHOW MASTER STATUS;
重启Slave mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):
CHANGE MASTER TO
-> MASTER_HOST='182.92.172.80', #MASTER服务主机地址
-> MASTER_PORT=3311,
-> MASTER_USER='rep1',
-> MASTER_PASSWORD='slavepass',
-> MASTER_LOG_FILE='mysql-bin.000003',
-> MASTER_LOG_POS=73;
启动slave同步进程:
start slave;
查看slave状态:
show slave status\G;
当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。
还可以用到的其他相关参数:
master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:
不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
只同步哪些数据库,除此之外,其他不同步
binlog-do-db = game
启动
初始化MySQL
mysqld --initialize-insecure --user=mysql8-master
可能报错:没有msvcr120.dll文件
网上下载 msvcr120.dll 文件
复制到 C:WindowsSystem32目录下
再次执行初始化操作
安装服务
mysqld install [服务名] # 安装mysql 服务
net start mysql # 启动服务
删除服务
sc delete <服务名> 或 mysqld --remove
登录数据库
第一次无密码,直接回车
mysql -u root -p
显示所有数据库
show databases;
使用某个库
use mysql;
更改root密码
update mysql.user
set authentication_string = password('123456') ,
password_expired = 'N'
where User = 'root'
AND Host = 'localhost';
如果报错就用
alter user 'root'@'localhost' identified by '123456';
刷新权限
flush privileges;
Master重新启动后需要修改Salve配置
CHANGE MASTER TO
MASTER_HOST='172.16.98.133',
MASTER_PORT=3311,
MASTER_USER='master',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000003',
MASTER_LOG_POS=98;
START Slave;
SHOW SLAVE STATUS;
注:
问题:Slave_SQL_Running:no
解决办法:
Stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
问题:Slave_SQL_Running:no
解决办法:
Stop slave;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026', MASTER_LOG_POS=0; #mysql-bin.000026 是通过SHOW MASTER STATUS;查询
START SLAVE;