首页 > 数据库 > MySQL > 正文

mysql主从复制(单向同步)

2024-07-24 12:59:32
字体:
来源:转载
供稿:网友

0、环境

系统:Ubuntu14.04(阿里云/腾讯云)

数据库:MySQL5.6

主:阿里云ubuntu

从:腾讯云ubuntu

默认需要同步的数据库已经事先创建。

1、原理

我们设置一个主库(Master),和一个从库(Slave或Secondary)。从库从主库复制数据内容,目的为灾难备份、读写分离等。

主库开启binary log,开启后每一次操作更新、修改、删除等都会记录在案,所以从库的同步过程其实就是获得这些过程,然后将现场还原,就达到了数据同步的目的。

2、开启mysql远程连接

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

PS:使用mysql的root用户和远程是很危险的,而且最后WITH GRANT OPTION还能授权,这里只是示范。最安全肯定是ssh登录再去访问数据库,又或者新建一个mysql用户专门用于同步。

上面的语句完成后,就可以用:

用户名为:root

密码为:123456(这个设置的密码不是原来ssh登录进去的密码,当然你也可以设置成一样的吧)

shell> mysql -u root -h xx.xx.xx.xx -pshell> 123456

查看用户是否可以通过网络访问

root@iZwz96uh8912ewgq9yv5nxZ:~# mysql -u root -pEnter passWord:Welcome to the MySQL monitor. Commands end with ; or /g.Your MySQL connection id is 101Server version: 5.6.33-0ubuntu0.14.04.1-log (Ubuntu)Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '/h' for help. Type '/c' to clear the current input statement.mysql> use mysqlReading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql> select user , host from user;+------------------+-------------------------+| user | host |+------------------+-------------------------+| root | % || root | 127.0.0.1 || root | ::1 || root | izwz96uh8912ewgq9yv5nxz || debian-sys-maint | localhost || root | localhost |+------------------+-------------------------+6 rows in set (0.01 sec)mysql> mysql -u root -puse mysqlselect user , host from user;

看到有个%号说明那个用户可以任意host远程直接登录mysql了。

3、配置主服务器

cd /etc/mysqlcp my.cnf mycnf.baknano my.cnf

修改配置文件:

server-id = 1(服务id,这个需要每个不同)log_bin = /var/log/mysql/mysql-bin.log(这是主服务器,必须开启log_bin,这句就是开启了)binlog_format =mixed(混合比较好)binlog_do_db = master(需要同步的数据库,如果多个数据库,重复这个配置)binlog_ignore_db = mysql(排除不需要同步的数据库,如果多个数据库,重复这个配置)

都是有默认的,去除前面的#号就行了,binlog_format=mixed这句是没有的,自己加。

重启mysql,让配置生效:

sudo service mysql restart

得到当前binlog信息:

mysql> show master status;+------------------+----------+--------------+------------------+--------------- ----+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_ Set |+------------------+----------+--------------+------------------+--------------- ----+| mysql-bin.000003 | 232 | master | mysql | |+------------------+----------+--------------+------------------+--------------- ----+1 row in set (0.03 sec)

我们关注File(mysql-bin.000003)和Position(232),这两个状态是我们需要同步需要用到的,此时不要动数据库了,不管是增删改查都会改变Posituion。

你这里看到Binlog_Do_DB是叫做master,是因为我数据库名就叫master,其他名字也可以的,看你具体创建。

4、配置从服务器

首先检查能不能远程主数据库:

shell> mysql -u root -h xx.xx.xx.xx -pshell> (输入密码123456,因为我们主服务其授权的时候的密码是123456)

编辑mysql配置文件:

cd /etc/mysqlcp my.cnf mycnf.baknano my.cnf

修改配置文件:

server-id = 2(服务id,这个需要每个不同)log_bin = /var/log/mysql/mysql-bin.log(这是主服务器,必须开启log_bin,这句就是开启了)binlog_format =mixed(混合比较好)binlog_do_db = master(需要同步的数据库,如果多个数据库,重复这个配置)binlog_ignore_db = mysql(排除不需要同步的数据库,如果多个数据库,重复这个配置)

重启mysql服务:

sudo service mysql restart

让主服务器同步数据到从服务器

mysql> stop slave;mysql> change master to master_host='xx.xx.xx.xx', master_user='root',master_password='123456',master_log_file='mysql-bin.000003',master_log_pos=232;(保证是最新的position)mysql> start slave;

查看从数据库信息:

show slave status;

此时你看到

Slave_IO_Running | Slave_SQL_Running| Yes | Yes

就说明配置成功了。

这时你总算可以去操作主数据库了。

这时你创建一个表插入数据你可以看到从数据库也改变了。

参考文章:配置MySQL主从复制


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表