MySQL主动复制架构
1. 安装数据库
1.1. 下载数据库
略
1.2. 卸载系统默认mariadb数据库
rpm -qa|grep mariadb
rpm -e mariadb-libs --nodeps 不验证软件包的依赖关系
1.3. 安装数据库(顺序)
rpm -ivh mysql-community-common-8.0.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-plugins-8.0.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.26-1.el7.x86_64.rpm
1.4. 修改数据库配置
vim /etc/my.cnf
port=3306
datadir=/mnt/mysql/data
socket=/mnt/mysql/data/mysql.sock
# 开启binlog
server_id=1
log-bin=mysql-bin
binlog-format=ROW
[client]
socket=/mnt/mysql/data/mysql.sock
1.5. 初始化数据库
mysqld --initialize --user=mysql
1.6. 关闭setenforce
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
1.7. 启动数据库
systemctl start mysqld
1.8. 获取数据库密码
grep password /var/log/mysqld.log
1.9. 登陆数据库初始化root密码
mysql -uroot -p
> alter user 'root'@'localhost' identified by 'passwd';
2. 主库
2.1. 创建数据库同步账号
mysql> create user 'repl'@'192.168.8.%' identified by 'rencrui';
mysql> grant replication slave,replication client on *.* to 'repl'@'192.168.8.%';
2.2. 查看binlog
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 | 156 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
3. 从库
3.1. 开启binlog
vim /etc/my.cnf
server_id=2
log_bin=mysql-bin
binlog-format=ROW
relay_log=/mnt/mysql/data/mysql-realay-bin
3.2. 连接主库binlog并启动
mysql> change master to
-> master_host='192.168.8.205',
-> master_user='repl',
-> master_password='rencrui',
-> master_port=6033,
-> master_log_file='mysql-bin.000002',
-> master_log_pos=156;
Query OK, 0 rows affected, 8 warnings (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
3.3. 查看slave状态
> show slave status\G
3.4. 修改从库连接配置
> stop slave
> change master to
-> master_log_file='mysql-bin.000002',
-> master_log_pos=156;
> start slave
3.5. 验证主从集群
主库运行
> show processlist\G;
从库运行
> show processlist\G;
4. 主从配置详解
4.1. master.cnf
主从数据库配置核心部分
[mysqld]
log-bin=mysql-bin # 设置同步的binary log二进制日志文件名前缀,默认为binlog
server-id=1 # 服务器唯一id,默认为1,值范围为1~2^32−1,集群server-id不能重复
可选配置
binlog-do-db=test # 需要主从复制的数据库,如多个则重复配置
binlog-ignore-db=mysql # 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步),如多个则重复配置
binlog_cache_size=1M # 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_format=row # 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_expire_logs_seconds=2592000 # 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天
4.2. slave.cnf
主从数据库配置核心部分
[mysqld]
log-bin=mysql-bin # 设置同步的binary log二进制日志文件名前缀,默认是binlog
server-id=2
可选配置
replicate-do-db=test # 需要主从复制的数据库 ,如多个则重复配置
binlog-ignore-db=mysql # 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步) ,如多个则重复配置
binlog_cache_size=1M # 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_format=row # 主从复制的格式(mixed,statement,row,默认格式是statement。建议是设置为row,主从复制时数据更加能够统一)
binlog_expire_logs_seconds=2592000 # 配置二进制日志自动删除/过期时间,单位秒,默认值为2592000,即30天