一、主从数据库准备
受限于资源,我们大家都可能会是在本机上安装多个mysql数据库搭建主从做为上手练习
1、分别拷贝绿色版mysql,放在不同路径下(如果是多台服务器的一定要确保2个相同版本的mysql)
2、修改my.ini文件里的端口信息、数据库路径信息、数据保存路径信息
3、分别进入bin目录下,使用管理员权限打开cmd命令窗口
4、使用mysqld安装服务:mysqld --install 服务名 --defaults-file=路径\my.ini
5、使用net start 服务名 启动服务
如果出现启动服务立即停止的情况,到安装目录下执行了一下初始化 mysqld --initialize ,重新启动下服务即可。还有一种可能的情况是data这个目录没有一起拷贝过来,这个是需要拷的。
主从数据库服务安装好后,接下来是配置主从的工作:
二、master库配置
1、编辑mysql配置文件,my.int (如果是linux则是my.cnf)
主要是增加了配置主从同步这一段
# 配置主从同步
# 节点ID,确保唯一
server-id=1
# 开启binlog二进制日志
log-bin=mysql-bin
log-bin-index=master-bin.index #指定binlog文件的索引文件
max_binlog_size=500M #binlog的最大大小,超过会新建,同一语句不会跨文件
binlog_cache_size=128K #binlog缓存大小,执行SQL时会创建缓存
binlog-do-db=sharp #开启binlog的数据库
binlog-ignore-db=mysql #不开启的数据库
log-slave-updates#从库复制主库数据时更新binlog,从库做为其他从库的主库时这个参数很重要
expire_logs_days=2#日志保存天数,过期会清理
binlog_format="MIXED"#binlog日志格式,默认为statement,建议使用mixed
三、slave库配置
主要配置了
server-id=2
#需要同步的数据库
replicate_do_db=sharp
#主从复制忽略的数据库
replicate_ignore_db=mysql
注意:每个库的server-id必须为不一样。
主从库的配置文件配置好之后,我们重启下两个数据库服务。
四、master库设置
1、在主库上,设置一个同步使用的账户,并授予 REPLICATION SLAVE权限,最后刷新下权限:
CREATE USER 'master'@'%' IDENTIFIED WITH mysql_native_password BY 'tinalucky';
GRANT REPLICATION SLAVE ON TO 'master'@'%';
FLUSH PRIVILEGES;
2、查看master的状态:
SHOW master status;
从这可以得到主库当前的二进制日志名和偏移量值。查年这个是为了下面步骤里设置从库接入MASTER的信息使用,目的是从这个日志文件、从这个位置开始进行数据的恢复。
本人电脑上得到的是file:mysql-bin.000010, position:829。
接下来开始slave库的设置
五、slave库设置
slave库的设置接入master库的信息,
-> MASTER_HOST='localhost', #主库机器IP
-> MASTER_PORT=3308, #主库的端口
-> MASTER_USER='master', #接入主库的账户
-> MASTER_PASSWORD='tinalucky', #接入主库的密码
-> MASTER_LOG_FILE='mysql-bin.000010', #主库日志文件
-> MASTER_LOG_POS=829; #日志开始同步的偏移量
执行完以上配置后,主从基本搭建完全。检查下从库的状态:
show slave status\G;
从以上信息可以看出我们的配置是生效的。
下面我们可以测试下,在主库同步的sharp数据库下创建一个新表:
我们看下从库,已经同步过来:
在主库插入记录也一样会同步到从库。可以验证主从库搭建是成功的。
如果是拷贝的数据库的库可能会出现master and slave have equal MySQL server UUIDs的异常,那是因为主库和从库的UUIDS必须是不同的,主从mysql UUIDS相同, Slave_IO无法启动,报错信息如下:
The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
解决办法:修改mysql data 目录下auto.cnf 文件中uuid的值,使两台mysql不同即可,修改后重启mysql服务。