两台服务器配置相似尤其是mysql版本一致
主:10.1.1.6
从:10.1.1.8
主库配置:
登录数据库建数据库:
mysql> create database HA;
mysql> use HA;
mysql> create table T1(id int,name varchar(20));
service mysqld stop
修改数据库配置文件vi /usr或etc/my.cnf
log-bin=mysql-bin-master #启用二进制日志
server-id = 1 #本机数据库ID 标示
binlog-do-db=HA #可以被从服务器复制的库。二进制需要同步的数据库名
binlog-ignore-db=mysql #不可以被从服务器复制的库
后两个可以不写
service mysqld restart
master授权从库连接(master上操作)
grant replication slave on *.* to 'slave'(用户名)@'10.1.1.8(从库ip)' identified by '123456'(密码);
// 查看状态信息
mysql> show master status;
记录master上的日志文件名、position两个值需要记住后面要用
// 复制前要保证同步的数据库一致
mysqldump -usystem -p123456 HA >HA.sql #也可以导出数据库
关闭两个服务器的防火墙或是自己开启相应的端口,关闭selinux
// 将导出的数据库传给从服务器
方法一:scp ~/HA.sql 10.1.1.8:/root
不成功的话安装必要的软件openssl-client
从库配置:
两台数据库服务器mysql版本要一致
mysql> show variables like '%version%;`
测试连接到主服务器是否成功
mysql -uslave -p123456 -h 10.1.1.6
只有复制的权限
导入数据库,和主数据库服务器保持一致
mysql> create database HA;
mysql -usystem -p123456 HA<HA.sql
修改从服务器配置文件:
从服务器没必要开启bin-log日志
service mysqld stop
vim /etc/my.cnf
server-id = 2
read_only=1只读模式,可以限定普通用户进行数据修改的操作,但不会限定具有super权限的用户(如超级管理员root用户)的数据修改操作
service nysqld start
让slave连接master,并开始重做master二进制日志中的事件。
mysql>change master to master_host='10.1.1.6(主库ip)',master_user='backup',master_password='backup',master_log_file='mysql-bin-master.000001',master_log_pos=120;
master_log_file的值为上面主数据库状态的日志文件名;master_log_pos为position的值
mysql> start slave;
mysql> show slave status\G 查看状态
Slave_IO_Running :一个负责与主机的io通信
Slave_SQL_Running:负责自己的slave mysql进程
值都是yes表示同步成功
一般同步成功后,重启主库的话从库对应参数也会变化
再到主服务器上查看状态:
mysql> show processlist \G
插入数据测试同步:
mysql> insert into T1 values(1,'天河');
从数据库上查看:
select * from HA.T1
如果遇到主从不同步,看一下主从bin-log的位置,然后再同步。
mysql> show master status \G;查看当前主库状态
从服务器执行MySQL命令下:
mysql> slave stop; #先停止slave服务
mysql> change master to master_log_file='mysql-bin-master.000001' ,master_log_pos=120;
#根据上面主服务器的show master status的结果,进行从服务器的二进制数据库记录回归,达到同步的效果
mysql>slave start; #启动从服务器同步服务
mysql> show slave status\G; #看一下从服务器的同步情况
Slave_IO_Running: Yes
Slave_SQL_Running: Yes// 如果都是yes,那代表已经在同步
// 重启从服务器,再查看状态:
停止从服务器slave stop;
开启从服务器slave start;
// 排错思路:
1、二进制日志没有开启
2、IPTABLES 没有放开端口
3、对应的主机 IP地址写错了
SQL线程出错
1、主从服务器数据库结构不统一
出错后,数据少,可以手动解决创建插入,再更新slave状态。
注:如果主上误删除了,那么从上也就误删除了。 #因此主上要定期做mysqldump备份。
mysql的主从复制,主要通过binlog日志来实现
如果在从库里删除数据变没法再同步以前的,最好不要在从库里删