一. 准备工作
1. 选择一个服务器当做主服务器,将服务器上需要用到的数据库进行备份.
2 .安装从库的 MySql,需要与主服务器的版本保持一致(此次用的数据库安装包是 mysql-5.7.38-linux-glibc2.12-x86_64.tar.gz).
3 .将主服务器上的数据同步到从库中.(主从同步只会同步创建同步之后的数据操作,对于原有的数据不会同步)
二.配置主数据库
(1).修改配置文件
vim /etc/my.cnf
添加配置
[mysqld]
log-bin=mysql-bin
server-id=1
(2).重启 mysql 服务(CentOS 7.9)
service mysql restart
使用命令行以 root 用户进入 MySQL
mysql -u root -p
输入密码,进入
(3).创建拥有从节点同步权限的用户
GRANT REPLICATION SLAVE ON *.* TO 'userName'@'%' IDENTIFIED BY 'yourPassword';
其中 userName 为用户名,yourPassword 为密码
刷新权限
FLUSH PRIVILEGES;
查询主库状态
show master status;
![](https://i-blog.csdnimg.cn/blog_migrate/0b4ed5406d8b14201b8af5860500ab7b.png)
记录下 File ,Position 字段的值
其中 File 为操作日志文件,Position 为指针位置,这两个字段是数据同步的关键
三.配置从数据库
(1).修改从数据库配置文件
vim /etc/my.cnf
[mysqld]
server-id=2
注意: 每一个服务器的 server-id 都不能重复
重启 mysql 服务(CentOS 7.9)
service mysql restart
(2).使用命令行以 root 用户进入 MySQL
mysql -u root -p
输入密码,进入
执行同步语句
CHANGE MASTER TO MASTER_HOST='masterServerIp', MASTER_PORT=masterPort, MASTER_USER='masterUser', MASTER_PASSWORD='masterPassword', MASTER_LOG_FILE='masterLogFile', MASTER_LOG_POS=masterPosition;
其中 masterServerIp:为主库服务器地址(ip或域名)
masterPort:为主库 mysql 端口(需要确保外网可访问)
masterUser:为刚创建的用于向从库同步数据的用户
masterPassword:为刚创建的用于向从库同步数据的用户密码
masterLogFile:为主库的日志文件名,对应字段 File
masterPosition:为主库指针位置,对应字段 Position
(3).启动从库同步
start slave;
查询从库同步状态
show slave status\G;
主要关注字段: Slave_IO_Running,Slave_SQL_Running,这两个字段值为 Yes 则从库同步状态良好
至此,数据库同步的配置已经基本完成
四. 从库设置只读用户
登录从库,添加只读用户
GRANT SELECT ON *.* TO 'userName'@'%' IDENTIFIED BY 'yourPassword';
其中 userName 为数据库用户名,yourPassword 为用户密码
刷新权限
FLUSH PRIVILEGES;
在连接从库时使用只读用户.
五.优化点
(1).mysql日志保留策略:设置binlog日志保存天数,文件大下限制
查看当前binlog保留时长,文件大下限制
查看binlog的保留时长[expire_logs_days]
0表示永久保留
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 0 |
+------------------+-------+
1 row in set (0.00 sec)
(2).查看binlog的文件大小限制[max_binlog_size]
1073741824
mysql> show variables like 'max_binlog_size';
+-----------------+------------+
| Variable_name | Value |
+-----------------+------------+
| max_binlog_size | 1073741824 |
+-----------------+------------+
1 row in set (0.01 sec)
————————————————
(3).全库同步与部分同步
我们目前配置的主从同步是针对全库配置的,而实际环境中,一般并不需要针对全库做备份,而只需要对一些特别重要的库或者表来进行同步。那如何针对库和表做同步配置呢?如下所示
首先在Master端:
在my.cnf中,可以通过以下这些属性指定需要针对哪些库或者哪些表记录binlog
需要同步的二进制数据库名
binlog-do-db=testdemo
只保留7天的二进制日志,以防磁盘被日志占满(可选)
expire-logs-days = 7
不备份的数据库
binlog-ignore-db=information_schema
binlog-ignore-db=performation_schema
binlog-ignore-db=sys
然后在Slave端:在my.cnf中,需要配置备份库与主服务的库的对应关系.
如果salve库名称与master库名相同,使用本配置
replicate-do-db = testdemo
如果master库名[testdemo]与salve库名[testdemo01]不同,使用以下配置[需要做映射]
replicate-rewrite-db = testdemo -> testdemo01
如果不是要全部同步[默认全部同步],则指定需要同步的表:
replicate-wild-do-table=testdemo.user
replicate-wild-do-table=testdemo.demotable