按照第一篇安装 mysql 数据库, 并做 主 从(一) 安装好两台mysql;做好这些后,我们来做主从吧!
ip | serverid | role |
192.168.80.119 | 1 | master |
192.168.80.110 | 2 | slave |
master上开启binlog日志,加入以下配置
vim /etc/my.cnf
[mysqld]
server-id=1 #服务器id (主从必须不一样)
log-bin=mysql-bin #打开日志(主机需要打开),这个mysql-bin也可以自定义,这里也可以加上路径
#作为主机的配置,可以不写,默认所有
binlog-do-db= #要给从机同步的库(多个写多行)
binlog-ignore-db=mysql #不给从机同步的库(多个写多行)
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
expire_logs_days=7 #自动清理 7 天前的log文件,可根据需要修改
重启数据库
service mysqld restart
mysql -uroot -p
password
mysql> show variables like '%log_bin%';
master的数据库中建立备份账号:backup为用户名,%表示任何远程地址,如下表示密码为123456的任何远程地址的backup都可以连接master主机
mysql> grant replication slave on *.* to 'backup'@'%' identified by '123456';
mysql> use mysql
mysql> select user,authentication_string,host from user;
重启MySQL服务并设置读取锁定,读取锁定的意思是只能读取,不能更新,以便获得一个一致性的快照
mysql> show master status\G
查看主服务器上当前的二进制日志名和偏移量值这里的file 和position 要和从上的一致
导出master(192.168.80.119)种的数据,然后导入slave 中
master:有几个数据库就导出几个
mysqldump -uroot -proot -hlocalhost test> /opt/test.bak
#如果要传所有就用*,如果传具体某一个,就写文件名
scp /opt/* [email protected]:/opt/
配置slave
添加配置
vim /etc/my.cnf
[mysqld]
server_id=2
#加上以下参数可以避免更新不及时,SLAVE 重启后导致的主从复制出错。
read_only = 1
master_info_repository=TABLE
relay_log_info_repository=TABLE
#避免一些错误导致主从断开
slave-skip-errors = 1062,1032,1060
#relay_log_recovery=1 #从机禁止写
#super_read_only=1 #从机禁止写
然后导入到mysql数据库中,slave上的employees数据库不存在则先创建,然后再导入
mysql> create database employees;
mysql -uroot -p123456 -hlocalhost employees < /opt/employees.bak
service mysqld restart
mysql -uroot -proot
#进入sql命令
mysql> stop slave;
mysql> change master to
-> master_host='192.168.80.119', #master的ip
-> master_user='backup', #备份用户名
-> master_password='123456', #密码
-> master_log_file='mysql-bin.000002', #上面截图,且要与master的参数一致
-> master_log_pos=9992929; #上面截图,且要与master的参数一致
mysql> start slave;
查看slave从机的状态
mysql> show slave status \G
图中2个yes 代表设置成功
关闭掉主数据库的读取锁定,并测试,两个yes,并且从的 Read_Master_Log_Pos 与主的Position一致,则ok.
从数据库可能会比主数据库的小,多执行几次看数据是否一致在变化,并接近,因为主从同步有延迟.
在主数据库上新建一个数据库看一下,
master:
mysql> create database test1;
mysql> SHOW DATABASES;
slave:
mysql> SHOW DATABASES;
如果test1,出现在slave,说明主从同步成功.