win7上搭建mysql主从服务器
安装前提
如果以前安装过mysql,请注意注册表的mysql安装路径是否正确,防止不必要的浪费时间找一堆安装错误。下面是查找注册表的mysql安装路径配置
第5步找到master(mysql主服务),跟你们的MySQL可能不一样,原因,是因为我在注册安装mysql服务时,指定了master为主库的服务名称,所以你们可以自行指定数据库服务名。
同时查看slave(mysql从服务器)路径是否也正确
1、解压mysql-5.7.20-win64.zip压缩包到指定文件目录下,将解压出来的mysql-5.7.20-winx64文件夹复制一份mysql-5.7.20-winx642
2、解压出来的文件缺少my.ini配置文件,自行创建该文件,
一、配置主库
3.填写主库mysql-5.7.20-winx64文件夹中my.ini文件内容
[client]
# 设置mysql客户端默认字符集
default-character-set=utf8
port = 3306
[mysqld]
#二进制日志文件,记录主库增删改查的操作,给从库执行同步操作留下记录
log-bin=master-bin
#记录log-bin的最后一次操作的索引位置,给从库执行同步操作留下查询位置记录
log-bin-index=master-bin.index
#服务Id,和slave 的server-id不一样
server-id=1
#sync_binlog=224
#如果不配置主从同步的数据库,则默认全库同步,建议配置全部数据库同步,否则有可能导致 slave_IO_Running:NO 或者 slave_SQL_Running:NO的异常
#做主从同步的数据库名
binlog-do-db=mmw_rebuild //这是自己创建的数据库
binlog-do-db=mysql
binlog-do-db=performance_schema
binlog-do-db=information_schema
binlog-do-db=sys
#忽略不同步的数据库名
#binlog-ignore-db=mysql
#binlog-ignore-db=performance_schema
#binlog-ignore-db=information_schema
#端口
port=3306
# 设置mysql的安装目录 (注意文件目录建议如下使用双反斜杠,不然安装数据库时遇到以s或者其他特殊字符开头的目录名,例如 E:\mysql\slave\data 数据库会报错,找不到目录 )
basedir=E:\\mysql\\mysql-5.7.20-winx64
# 设置mysql数据库的数据的存放目录
datadir=E:\\mysql\\mysql-5.7.20-winx64\\data
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
#以下配置可自行决定数值,但主从库需要一致
# 允许最大连接数
max_connections=200
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#下面sql-mode 在低级版本mysql换为高版本mysql时,如果迁移数据报错,可以去掉注解符号(把mysql5.6的数据和结构转存到mysql5.7)
#sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
4、dos切换到mysql-5.7.20-winx64文件夹bin目录下执行
mysqld --install master --defaults-file="E:\mysql\mysql-5.7.20-winx64\my.ini"
或者命令简写
mysqld --install master
安装服务如下图所示
master为mysql启动服务名称,在下图可看到服务的创建成功
5、启动matser(mysql主数据库)
执行以下命令初始化master数据库
mysqld --initialize-insecure --user=mysql
执行成功后会在生成data文件夹,如下图
执行以下命令启动master(mysql主数据库)
net start master
启动成功如下图所示
6、输入以下命令连续按回车登陆数据库
mysql -uroot -p
7、修改mysql密码 (此方法适用于mysql8.0之前的版本,且不包含8.0版本)
mysql 默认密码为空 所以 可以在登录mysql之后 设置密码为 root ,输入如下
set password for root@localhost = password('root');
8、切到主库dos窗口输入以下命令查看主库状态,记住下图显示的两个值
show master status;
记住这两个值 ,配置从库时需要使用
9、首先我们需要在主库(master)中创建一个用户用于与从库同步的用户名和密码(这里我创建一个test用户,密码为mysql),并给test用户授权,以用于主库操作从库。
命令说明
格式:
create user test; //创建用户test
grant replication slave on *.* to '从库用户名'@'从库主机地址'identified by '密码(mysql)';
flush privileges;//刷新
切换到master dos命令窗口下实际执行以下命令
create user test;
grant replication slave on *.* to 'test'@'127.0.0.1'identified by 'mysql';
flush privileges;
注意:若是执行 grant replication slave on *.* to ‘test’@’%'identified by ‘mysql’;则任意服务器皆可授权
执行结果如下:
二、配置从库
10.填写主库mysql-5.7.20-winx642文件夹中my.ini文件内容
[client]
port=3307
default-character-set=utf8
[mysqld]
#从库配置
# 设置日志的路径,与master类似
log-bin=slave-bin
# salve服务器标识,唯一,不能与master相同
server-id=2
# 设置要与主库同步的数据库
replicate-do-db=mmw_rebuild
replicate-do-db=mysql
replicate-do-db=performance_schema
replicate-do-db=information_schema
replicate-do-db=sys
#忽略与主库不同步的数据库名
#replicate-ignore-db=mysql
#replicate-ignore-db=performance_schema
#replicate-ignore-db=information_schema
#设置3307端口
port=3307
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 设置mysql的安装目录
basedir=E:\\mysql\\mysql-5.7.20-winx642
# 设置mysql数据库的数据的存放目录
datadir=E:\\mysql\\mysql-5.7.20-winx642\\data
#以下配置可自行决定数值,但主从库需要一致
# 允许最大连接数
max_connections=200
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
11、新开dos切换到mysql-5.7.20-winx642文件夹bin目录下执行以下命令
mysqld --install slave --defaults-file="E:\mysql\mysql-5.7.20-winx642\my.ini"
结果如下图所示表示成功
slave为从库mysql启动服务名称,在下图可看到服务的创建成功
12、启动slave(mysql 从库数据库)
执行以下命令初始化slave数据库
mysqld --initialize-insecure --user=mysql
执行成功后会在生成data文件夹,如下图
13、执行以下命令启动slave(mysql从数据库)
net start slave
如果启动失败 请检查各个目录和端口号是否配置正确
14、输入以下命令连续按回车登陆数据库
mysql -uroot -p
15、修改mysql密码 (此方法适用于mysql8.0之前的版本,且不包含8.0版本)
mysql 默认密码为空 所以 可以在登录mysql之后 设置密码为 root ,输入如下
set password for root@localhost = password('root');
17、切到从库输入同样的命令查看,结果为空
show slave status;
18、现在我们切到从库(slave),把主库与从库联系起来。
执行以下命令:
change master to
master_host='127.0.0.1', //主服务器地址
master_port=3306, //主服务器端口号
master_user='test', //主服务器登陆账号
master_password='mysql', //主服务器登陆账号密码
master_log_file='master-bin.000006', //主服务器二进制日志文件名
master_log_pos=398; //主服务器二进制日志文件索引
19、然后执行命令 start slave 开启主从同步
start slave;
20、然后执行命令查看 slave的状态
show slave status \G;
三、主从库的关闭顺序
在从库dos命令窗口,执行以下命令关闭slave从库同步
stop slave //停止从服务器线程
exit; //退出slave服务器
net stop slave //关闭slave服务器
四、重启slave从库,查看从库连接状态,重新连接数据库
show slave status\G;
如果出现 slave_IO_Running:NO 或者 slave_SQL_Running:NO的错误
进行如下操作解决
首先切换到主服务器master,再次获取下面两个值
show master status;
切换到从库服务器slave,执行以下操作
stop slave;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
change master to master_host='127.0.0.1',master_port=3306,master_user='test',
master_password='mysql',master_log_file='master-bin.000003',master_log_pos=40315589;
start slave;
show slave status\G;
五、如果从现有服务器直接复制制作从库,需要注意点有三处
1.删除slave从服务器 根目录下 data文件夹中的auto.cnf,启动数据库会自动生成新的server-uuid
或者用新生成一个uuid替换掉该文件中的值
2.slave从服务器的根目录下的my.ini文件中的server_id一定要注意不能跟主服务器相同,否则报错(配置文件上面已有自己去看)
3.执行完1、2步,必须重启从库,重新连接主库
主库操作
show master status;
从库操作
stop slave; //停止从库线程运行
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; //跳过当前错误
change master to master_host='127.0.0.1',master_port=3306,master_user='test',
master_password='mysql',master_log_file='master-bin.000004',master_log_pos=1639;
exit; //退出mysql
net stop slave //关闭mysql
net start slave //重启mysql
mysql -uroot -proot //登陆mysql
start slave; //重启slave线程
show slave status\G; //显示从库连接状态