mysql 配置主从同步/主从复制

需要2个安装了mysql的服务器,一个主服务器,一个或多个从服务器。

mysql安装:https://www.cnblogs.com/duguxiaobiao/p/9465702.html

我的本地虚拟服务器:

默认3306端口

192.168.28.30 主

192.168.28.56 从

 

 

1、修改主服务器的my.cnf

# 1、编辑my.cnf
vim /etc/my.cnf

# 2、添加以下配置
server-id = 1        # 节点ID,确保唯一
# log config
log-bin = mysql-bin     #开启mysql的binlog日志功能
sync_binlog = 1         #控制数据库的binlog刷到磁盘上去 , 0 不控制,性能最好,1每次事物提交都会刷到日志文件中,性能最差,最安全
binlog_format = mixed   #binlog日志格式,mysql默认采用statement,建议使用mixed
expire_logs_days = 7                           #binlog过期清理时间
max_binlog_size = 100m                    #binlog每个日志文件大小
binlog_cache_size = 4m                        #binlog缓存大小
max_binlog_cache_size= 512m              #最大binlog缓存大
binlog-ignore-db=mysql #不生成日志文件的数据库,多个忽略数据库可以用逗号拼接,或者 复制这句话,写多行
auto-increment-offset = 1     # 自增值的偏移量
auto-increment-increment = 1  # 自增值的自增量
slave-skip-errors = all #跳过从库错误

# 3、重启mysql
systemctl restart mysqld

 

 

2、修改从服务器的my.cnf

# 1、编辑my.cnf
vim /etc/my.cnf


# 2、添加以下配置
server-id = 2
log-bin=mysql-bin
relay-log = mysql-relay-bin
replicate-wild-ignore-table=mysql.%
replicate-wild-ignore-table=test.%
replicate-wild-ignore-table=information_schema.%


# 3、重启mysql
systemctl restart mysql

 

 

3、主服务器mysql创建复制用户并授权

# 1、进入master的数据库,为master创建复制用户
mysql -uroot -p123456
mysql > CREATE USER repl_user IDENTIFIED BY '复制用户的密码';


# 2、赋予该用户复制的权利
mysql > grant replication slave on *.* to '复制用户名'@'从服务器ip' identified by '复制用户的密码';
mysql>FLUSH PRIVILEGES;


# 3、查看master的状态
show master status

 

 

 

4、配置从服务器

执行mysql

CHANGE MASTER TO MASTER_HOST = '主服务器ip',MASTER_USER = '复制用户名',MASTER_PASSWORD = '复制用户的密码',MASTER_PORT = 3306,MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=856,MASTER_RETRY_COUNT = 60,MASTER_HEARTBEAT_PERIOD = 10000;

备注
MASTER_LOG_FILE='mysql-bin.000001',#与主库File 保持一致
MASTER_LOG_POS=856, #与主库Position 保持一致

 

5、启动从库进程

mysql > start slave;

这一步后,配置就结束了。

 

 

6、测试

1、在主服务器mysql执行新建test数据库命令,从服务器mysql自动就出现了test数据库。

# 主库执行

create database test2;

 

 

2、主库在配置主从复制之前就已经存在的表,如果在test里新建表,会发生什么?

# 主库执行

create table `user`(`id` int(11) UNSIGNED AUTO_INCREMENT,`username` varchar(30) NOT NULL,`password` varchar(50) NOT NULL,PRIMARY KEY (`id`))ENGINE=InnoDB DEFAULT CHARSET=utf8;

结果:主库test库,从库没有test库,在主库的test库新建数据表,从库不会发生任何变化。

 

2.2、假如我在从库也新建了test库,然后再从主库test库新建user2表,从库的test库,会不会出现user2表呢?

结果:不会,只要配置主从后,后面创建的数据库才会进行从库同步

 

3、假如我在从库test2库,新建user2表,主库会不会同步从库的user2表呢?

结果:主库不会同步从库的命令

 

之后又在主库新建user2表,然后在主库插入一条数据,从库并没有出现插入的数据。

# 主库执行

insert into user2(`username`,`password`)values('user1','123456');

 

 

结果:在从库新建的表,再去主库新建一样的表,执行sql,不会进行同步操作。

 

 

 

7、经过这几次操作后

从库发生了错误,停止了同步,原因是从库数据冲突导致同步停止。

 

解决方法:

1、登陆从库查看从库的同步状态 SHOW SLAVE STATUS , 查看Slave_IO_Running  、Slave_SQL_Running 这两个状态是否是YES,如果不是那么就表示主从同步出错停止了,再看看错误的信息是什么(Last_SQL_Error提示)

2、解决错误:如果有在从库做什么操作,先备份从库新增的数据或者新建的表,然后把这些新增的数据、新建的表删除掉,关闭同步,重启同步,如果还有问题,则再执行下面的操作:

stop slave;
# 表示跳过一步错误,后面的数字可变
set global sql_slave_skip_counter=1;
start slave;

只要不在从库做插入更新删除等操作,就不会出现同步出错的问题。

 

 

 

 

 

 

以下省略。。。


最近弄了几个站,留个外链
ITM游戏资源
ITM资源

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值