CentOS7.2 mysql 主从复制

1. 关闭selinuxs和防火墙

以下针对两台服务器同时操作

chkconfig selinux off   #关闭开机启动
setenforce 0    #关闭selinux
vim /etc/selinux/config #编辑配置文件
SELINUX=disabled 修改这一行
centos6关闭防火墙:
chkconfig iptables off  #关闭防火墙的开机启动
service iptables stop   #关闭防火墙
centos7 关闭防火墙:
关闭: systemctl stop firewalld
开机禁用  : systemctl disable firewalld
查看状态: systemctl status firewalld 
getenforce  #检测是否关闭

2. 修改主服务器的配置

vim /etc/my.cnf

修改如下行

log-bin=mysql-bin   #要开启
server-id=5 #建议改成服务器ip地址的后一位

3. 修改从服务器的配置

vim /etc/my.cnf

修改如下行

server-id=12    #建议改成服务器ip地址的后一位

4. 重启两台mysql服务

service mysql restart

5. 数据库结构一致

mysql -uroot -p #连接两台服务器的mysql,进行相同的操作。

create database tabledemo;
use tabledemo;
create table user (id int primary key  auto_increment, username varchar(30))engine=innodb default charset=utf8;
exit;

6. 在主数据库上面设置一个专门用来访问权限(同步权限)的账户。

mysql -uroot -p #连接主服务器的数据库
CREATE USER 'phy'@'0.0.0.0' IDENTIFIED BY '123456';
grant replication slave on *.* to 'phy'@'%' identified by '123456';

show master status;  #查看主服务器状态  mysql-bin.000013 |      628
mysql-bin.000013 |      628  #要记住,配置从数据库用,重启后会改变

7. 配置从服务器

mysql -uroot -p #连接从服务器
? change master to;
CHANGE MASTER TO
MASTER_HOST='master2.example.com',
MASTER_USER='replication',
MASTER_PASSWORD='bigs3cret',
MASTER_PORT=3306,
MASTER_LOG_FILE='master2-bin.001',
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;

执行下面命令
change master to
    -> master_host='192.168.134.131', #步骤6主数据库对应的服务器ip
    -> master_user='phy',
    -> master_password='123456',
    -> master_log_file='mysql-bin.000013', #步骤6主数据库对应的值
    -> master_log_pos=628; #步骤6主数据库对应的值

start slave; #开启从服务器
show slave status \G;    #查看状态

#能看到下面这两行就表示成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
#成功
指定某个数据库需要这么做
master端:
vim /etc/my.cnf
binlog-do-db= testdemo  #二进制需要同步的数据库名
binlog-ignore-db=mysql  #避免同步 mysql 用户配置,以免不必要的麻烦
slave端:
vim /etc/my.cnf
replicate_do_db=testdemo         #(do这个就是直接指定的意思)  
replicate_ignore_db=mysql

然后重启mysql

service mysqld restart

分别检查看是否相同

 show master status;    #查看主服务器状态  mysql-bin.000014 |    107(此时已经变了)
show slave status \G;   #查看状态(正常情况重启后也会变)

若不同:

1.进入主服务器mysql命令模式,查看主服务器指针位置,输入show master status\G;  查看File:mysql-bin.000002    Position:94111504

2.进入从服务器mysql命令模式,输入
slave stop; #关闭mysql里的slave功能。

3.输入 change master to master_log_file='mysql-bin.000002',master_log_pos=94111504;  #手动调整指针位置
slave start; #然后再开启

4.最后再输入show slave status\G;  如果  Slave_IO_Running: Yes  Slave_SQL_Running: Yes  则表示同步正常。

8.插入数据测试同步

Master:

mysql -p

use tabledemo;
insert into user values('','testuser1');
insert into user values('','testuser2');

Slave:

mysql -p

use tabledemo;
select * from tabledemo;

9. 解决主键冲突的问题

在丛库上,执行以下命令,跳过它:

#先停止slave:
stop slave;
set global sql_slave_skip_counter = 1 
#再启动slave:
start slave;
说明:执行一次后查看是否正常,不正常再继续执行该命令

#或者在从库的my.cnf中加上这条:
slave-skip-errors = 1062

你可能感兴趣的:(CentOS7.2 mysql 主从复制)