mysql 从库部署

因为最近业务需求,需要建立一个数据仓库,为了避免主库受到影响,所以需要建立一个从库给数据仓库提供源数据。

目前2台机器都是 阿里云ECS云服务器, 所以两者通讯可以直接使用内网连接。

主库配置

修改主库配置文件 my.cnf :

1
2
3
4
5
6
7
8
9
10
11
[mysqld]
# 数据库唯一id, 该id 必须和其他链接的数据库不同
server-id= 1
#启用二进制日志;
log-bin=mysql-bin
# 日志格式, 有Mixed,Statement,Row三种,默认格式是 Statement,Mixed相当于前两种模式的结合
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 10
# 可以选择需要同步哪些库
binlog-do-db=need_db

修改后, 保存,并重启数据库。

重启完成后,进入mysql,创建一个从库同步使用的帐号:

1
2
3
4
> mysql -uroot -p

mysql> CREATE USER 'slave'@'172.18.18.2' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

创建帐号时, 为了安全着想 最好指定host参数,我这里填写的是从库阿里云的内网地址。

锁表,避免这段时间有新的数据产生, 执行 show master status 记住Position

1
2
3
4
5
6
7
8
mysql> FLUSH TABLES WITH READ LOCK;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 154 | need_db | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

从库配置

修改从库配置文件 my.cnf :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[mysqld]

# 数据库唯一id, 该id 必须和其他链接的数据库不同
server-id= 1
#启用二进制日志;
log-bin=mysql-bin
# 日志格式, 有Mixed,Statement,Row三种,默认格式是 Statement,Mixed相当于前两种模式的结合
binlog_format=mixed
# 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days = 10
# 可以选择需要同步哪些库
replicate-do-db=need_db
#如果发现主服务器断线,重新连接的时间差;
master-connect-retry=60

保存并重启mysql服务。

重启完成后,进入mysql,开始配置主从链接

1
2
3
4
5
6
7
8
9
10
> mysql -uroot -p

# 先停止slave服务
mysql> slave stop;

# 配置主从参数
mysql> change master to master_host='172.18.18.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=154, master_connect_retry=30;

# 启动slave服务
mysql> slave start;

参数解释:

1
2
3
4
5
6
7
master_host: Master 的IP地址
master_user: 在 Master 中授权的用于数据同步的用户
master_password: 同步数据的用户的密码
master_port: Master 的数据库的端口号
master_log_file: 指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos: 从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry: 当重新建立主从连接时,如果连接失败,重试的时间间隔,单位是秒,默认是60秒。

然后回到主库,解锁表

1
mysql> unlock tables;

回到从库查看状态:

1
mysql> show slave status \G;

如果 SlaveIORunning 和 SlaveSQLRunning 是Yes 说明已经正常工作了

作者

MartialBE

发布于

2019-09-29

更新于

2019-09-29

许可协议

评论