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
网友评论