参考
Mysql安装可参考:https://www.jianshu.com/p/7baf30834f16
主从配置:
https://www.cnblogs.com/cao-lei/p/13603043.html
https://blog.csdn.net/weixin_45310179/article/details/121098315
https://www.cnblogs.com/langtianya/p/5504774.html
主节点配置
# 修改mysql配置,openeuler的具体mysql配置不在/etc/my.cnf下,而在/etc/my.cnf.d/*.cnf中
cat /etc/my.cnf.d/mysql-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
# 指定server-id,需在主从集群中全局唯一
server-id=1
# 启用二进制日志
log-bin=mysql-bin
# 不进行同步的表,可设置多个
binlog-ignore-db=sys
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
# 设置需要复制的数据库(可设置多个),如果不设置,则同步所有表
#binlog-do-db=test
#binlog-do-db=test2
# 设置logbin格式,不同的格式有不同的特点。如下:
# ① STATEMENT模式(SBR):每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
# ② ROW模式(RBR):不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
# ③ MIXED模式(MBR):以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式
binlog_format=mixed
# 配置文件结束------------------
# 重启mysql
systemctl restart mysqld
# 登录,配置slave用户
mysql -uroot -p
# 创建用户
create user 'slave'@'%' identified with mysql_native_password by 'password';
# 授权
grant replication slave on *.* to 'slave'@'%';
# 刷新权限
flush privileges;
# 查询server_id是否可配置文件中一致
show variables like 'server_id';
# 若不一致,可设置临时ID(重启失效)
set global server_id = 1;
# 查询Master状态,并记录 File 和 Position 的值
mysql> show master status;
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
| mysql-bin.000002 | 532 | | sys,mysql,information_schema,performance_schema | |
+------------------+----------+--------------+-------------------------------------------------+-------------------+
1 row in set (0.00 sec)
从节点配置
# 修改mysql配置
[root@localhost my.cnf.d]# cat mysql-server.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysql/mysqld.log
pid-file=/run/mysqld/mysqld.pid
# 主从复制-从机配置
# 从服务器唯一ID
server-id=2
# 启用中继日志
relay-log=mysql-relay
# 配置结束-----------
# 登录,设置主库信息
mysql -uroot -p
# 查询server_id是否可配置文件中一致
show variables like 'server_id';
# 若不一致,可设置临时ID(重启失效)
set global server_id = 2;
# 设置主数据库参数,这里的master_log_file参数的值,取自master节点show master status;命令结果中的File的值
change master to master_host='192.168.133.129',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;
# 开始同步
start slave;
# 若出现错误,则停止同步,重置后再次启动
stop slave;
reset slave;
start slave;
# 查询Slave状态,查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。
mysql> show slave status\G
*************************** 1. row ***************************
略......
Master_Log_File: mysql-bin.000002
Read_Master_Log_Pos: 532
Relay_Log_File: mysql-relay.000002
Relay_Log_Pos: 326
Relay_Master_Log_File: mysql-bin.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
略......
1 row in set, 1 warning (0.01 sec)
至此,主从节点配置完成,可自行通过工具验证主从复制是否成功!