阿里云服务器主从数据库配置

一、实验目标
搭建两台MySQL服务器,一台作为主服务器,一台作为从服务器,主服务器进行写操作,从服务器进行读操作。

Server version 5.5.56-MariaDB

二、测试环境

主数据库: CentOS7, MySQL15.1 , 106.14.150.160

从数据库: CentOS7, MySQL15.1 , 106.14.150.161

三、主从配置步骤

1、确保主数据库与从数据库里的数据一样
例如:主数据库里的a的数据库里有b,c,d表,那从数据库里的就应该有一个模子刻出来的a的数据库和b,c,d表

2、在主数据库里创建一个同步账号

1)每个从数据库会使用一个MySQL账号来连接主数据库,所以我们要在主数据库里创建一个账号,并且该账号要授予 REPLICATION SLAVE 权限,你可以为每个从数据库分别创建账号,当然也可以用同一个!)

2)你可以用原来的账号不一定要新创账号,但你应该注意,这个账号和密码会被明文存放在master.info文件中,因此建议单独创一个只拥有相关权限的账号,以减少对其它账号的危害!)

3)创建新账号使用“CREATE USER”,给账号授权使用“GRANT”命令,如果你仅仅为了主从复制创建账号,只需要授予REPLICATION SLAVE权限。

4)下面来创建一个账号,账号名:mycong,密码:my123cong,只允许106.14.150.161的IP段登录,如下:

mysql -uroot -p

grant replication slave on *.* to 'mycong'@'106.14.150.161' identified by 'my123cong';

flush privileges;

5)如果开发防火墙,可能要配置下端口,如下:

vi /etc/sysconfig/iptables

增加一条记录 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

 然后重启防火墙 systemctl restart iptables 

3、配置主数据库

1)要主数据库,你必须要启用二进制日志(binary logging),并且创建一个唯一的Server ID,这步骤可能要重启MySQL。

2)主服务器发送变更记录到从服务器依赖的是二进制日志,如果没启用二进制日志,复制操作不能实现(主库复制到从库)。

3)复制组中的每台服务器都要配置唯一的Server ID,取值范围是1到(232)?1,你自己决定取值。

4)配置二进制日志和Server ID,你需要关闭MySQL和编辑my.cnf或者my.ini文件,在 [mysqld] 节点下添加配置。

5)下面是启用二进制日志,日志文件名以“mysql-bin”作为前缀,Server ID配置为1,如下:

[mysqld]
log-bin=mysql-bin
server-id=1
#网络上还有如下配置
#binlog-do-db=mstest //要同步的mstest数据库,要同步多个数据库,就多加几个replicate-db-db=数据库名 #binlog-ignore-db=mysql //要忽略的数据库

提示1:如果你不配置server-id或者配置值为0,那么主服务器将拒绝所有从服务器的连接。

提示2:在使用InnoDB的事务复制,为了尽可能持久和数据一致,你应该在my.cnf里配置innodb_flush_log_at_trx_commit=1 和 sync_binlog=1;
For the greatest possible durability and consistency in a replication setup using InnoDB with transactions, 
you should useinnodb_flush_log_at_trx_commit=1 and sync_binlog=1 in the master my.cnf file.

提示3:确保主服务器里的skip-networking选项未启用,如果网络被禁用,你的从服务器将不能与主服务器通信并且复制失败。
server-id = 1 #服务器标志号,注意在配置文件中不能出现多个这样的标识,如果出现多个的话mysql以第一个为准,一组主从中此标识号不能重复。
  log-bin=/home/mysql/logs/binlog/bin-log #开启bin-log,并指定文件目录和文件名前缀。
  max_binlog_size = 500M #每个bin-log最大大小,当此大小等于500M时会自动生成一个新的日志文件。一条记录不会写在2个日志文件中,所以有时日志文件会超过此大小。
  binlog_cache_size = 128K #日志缓存大小
  binlog-do-db = adb #需要同步的数据库名字,如果是多个,就以此格式在写一行即可。
  binlog-ignore-db = mysql  #不需要同步的数据库名字,如果是多个,就以此格式在写一行即可。
  log-slave-updates  #当Slave从Master数据库读取日志时更新新写入日志中,如果只启动log-bin 而没有启动log-slave-updates则Slave只记录针对自己数据库操作的更新。
  expire_logs_day=2 #设置bin-log日志文件保存的天数,此参数mysql5.0以下版本不支持。
  binlog_format="MIXED"   #设置bin-log日志文件格式为:MIXED,可以防止主键重复。
注意:
实际操作发现 /etc/my.cnf文件和教材说的不一样,可能我装的是MariaDB,如下:
 重启MySQL,sudo systemctl restart mariadb

查看主服务器状态,mysql> show master status;, 如图:

MariaDB [(none)]> show master status;
+-----------------+----------+--------------+------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-----------------+----------+--------------+------------------+
| mysq-bin.000001 |   25140 |              |                  |            (注意:记录好File和Position,后面要用)


四、配置从数据库

1)从服务器,同理,要分配一个唯一的Server ID,需要关闭MySQL,修改好后再重启,如下:

[mysqld]

server-id=2
#可以指定要复制的库
replicate-do-db = test #在master端不指定binlog-do-db,在slave端用replication-do-db来过滤
replicate-ignore-db = mysql #忽略的库
#网上还有下面配置
#relay-log=mysqld-relay-bin
提示1:如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
提示2:一般你不需要在从服务器上启用二进制日志,如果你在从服务器上启用二进制日志,那你可用它来做数据备份和崩溃恢复,或者做更复杂的事情(比如这个从服务器用来当作其它从服务器的主服务器)。
这里只讲一下2个参数,其他全部是从库连接主库的信息和中间日志relay-log的设置。
  master-connect-retry=30 #这个选项控制重试间隔,默认为60秒。
  slave-skip-errors=1007,1008,1053,1062,1213,1158,1159 #这个是在同步过程中忽略掉的错误,这些错误不会影响数据的完整性,有事经常出现的错误,一般设置忽略。其中1062为主键重复错误。

2)配置连接主服务器的信息
mysql> stop slave;
mysql>change master to master_host='106.14.150.160', master_user='mycong',master_password='my123cong', master_log_file='mysql-bin.000001', master_log_pos=25140;
mysql> start slave;

3)查看从服务器状态
mysql> show slave status \G;

5、测试数据同步 在主数据库添加一个表或者一条记录

至此,主从的配置已经完成了, 目前是在从库里面配置复制“test”这个库,
如果要添加其它库,可以在主服务器中添加“binlog-do-db”配置,或者在从服务器中添加“replicate-do-db”配置。

说明:
Slave_IO_Running:连接到主库,并读取主库的日志到本地,生成本地日志文件
Slave_SQL_Running:读取本地日志文件,并执行日志里的SQL命令。

如果从数据库复制出现错误:

Slave_IO_Running: No 
Slave_SQL_Running: Yes   或者

Slave_IO_Running: Yes 
Slave_SQL_Running:  No

一般是查看主数据库信息:show master status;然后重新配置从数据库信息

mysql> show processlist;  查看下进程是否Sleep太多。

Binlog Dump 状态一共4个
1 Sending binlog event to slave
已经读出来,正在发送

2 Finished reading one binlog; switching to next binlog
The thread has finished reading a binary log file and is opening the next one to send to the slave.

3 Master has sent all binlog to slave; waiting for binlog to be updated
等着新的binlog产生

4 Waiting to finalize termination

线程停止时候一个短暂状态

猜你喜欢

转载自blog.csdn.net/qq_35349114/article/details/79727455