1,需求分析
在现如今网站高并发的情况下,除了实现网站服务器的负载均衡,也需要配置数据库的主从复制从而实现读写分离,以减轻数据库压力,提高网站响应速度。主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。
2,环境:
主数据库:宿主机 windows + mysql
从数据库:virtualbox虚拟机 + ubuntu18.04 + mysql
3,环境测试
需要宿主机与虚拟机互相ping,看能否ping通,这个会决定主从复制的环境是否能ping通(如果出现主机可以ping通虚拟机,而虚拟机无法ping通宿主机的情况下,可以考虑关闭宿主机防火墙后再试,至少我是这么解决的),记录下宿主机的ip地址,
4,宿主机配置
1)打开mysql的配置文件mysql.ini
,在 [mysqld]
下添加
server-id=1 #注意此处id需唯一,不可和从数据库的相同#
log-bin-index=master-bin.index
找到行 log-bin=mysql-bin
取消掉行前注释
2)添加从库用来连接主库的用户,并设置权限
create user;
grant REPLICATION slave *.* to 'reple'@'192.168.1.*' identified by '123456';
flush privileges; #别忘了这一句,我就是忘了导致配置失败#
5,配置完成后重启数据库服务器,登录后执行命令show master status
查看主服务器配置状态。
记录下此处的file
列的内容以及position
列的内容,配置从服务器需要用到
6,配置从服务器
打开配置文件my.cnf
(我的在 /etc/mysql/my.cnf
),在[mysqld]
模块下添加(如果没有则自己添加):
server-id=2 #注意不能和主数据库的server-id相同#
relay_log_index=slave-relay-bin.index
relay-log=slave-relay-bin
7,保存后退出重新启动数据库服务
8,命令行登录数据库后,执行如下语句:
change master to
master_host='192.168.0.125' #注意此处IP换位你自己主数据库所在环境的IP地址#
master_user='repl', #此处将repl换为你自己创建的用来连接主数据库的用户名#
master_password='123456', #此处将123456换为你自己创建的用来连接主数据库的用户名对应的密码#
master_log_file='mysql-bin.000001' #换成你执行 show master status 后看到的file那一列的内容#
master_log_pos=2583; #换成你执行 show master status 后看到的Position那一列的内容#
9,开启从库:start slave
10,查看从库状态: show slave status\G;
当看到 Slave_IO_Running 和Slave_SQL_Running的值都为false 时则表示配置成功
12,此时在主库创建个表看看从库是否有自动创建数据新表吧。。
create table test(
id auto_increment primary_key,
name varchar(10);
);