测试环境 安装数据库 wget http://dev.mysql.com/get/mysql57‐community‐release‐el7‐8.noarch.rpm yum localinstall mysql57‐community‐release‐el7‐8.noarch.rpm ‐y
检查是否安装成功
yum repolist enabled | grep “mysql.‐community.”
安装mysql
yum install mysql‐community‐server ‐y
启动mysql
systemctl start mysqld systemctl status mysqld
开机启动
systemctl enable mysqld systemctl daemon‐reload
获取临时密码
grep ‘temporary password’ /var/log/mysqld.log
修改密码 包含大小写字母、数字和特殊符号,并且长度不能少于8位
mysql ‐uroot ‐p ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘Mastar@1994’;
允许root用户远程登录
GRANT ALL PRIVILEGES ON . TO ‘root’@’%’ IDENTIFIED BY ‘Mastar@1994’ WITH GRANT OPTION;
修改编码
vi /etc/my.cnf [mysqld] character_set_server=utf8 init_connect=’SET NAMES utf8’
重启数据库
systemctl restart mysqld
登录数据库 查看编码
mysql ‐uroot ‐pMastar@1994 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 默认配置文件路径: 配置文件:/etc/my.cnf 日志文件:/var/log/mysqld.log 服务启动脚本:/usr/lib/systemd/system/mysqld.service socket文件:/var/run/mysqld/mysqld.pid master_ip 10.246.250.224 slave_ip 10.246.250.225 VIP 10.246.250.250 配置主主数据同步 1、安全配置 2、master节点配置(10.246.250.224) 2.1、添加数据同步配置 show variables like ‘%character%’; systemctl stop firewalld setenforce 0 vi /etc/selinux/config SELINUX=disabled vi /etc/my.cnf
服务器的ID,必须唯一,一般设置自己的IP
server_id=224 # 下面slave节点server_id与此不一致
复制过滤:不需要备份的数据库(MySQL库一般不同步)
binlog‐ignore‐db=mysql
开启二进制日志功能,名字可以随便取,最好有含义(比如项目名)
log‐bin=skiff‐mysql‐bin
为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
29 1 2 3 4 1 2 3 4 5 6 7 8 2.2、master配置 2.3、slave配置 binlog_cache_size=1M
主从复制的格式(mixed,statement,row,默认格式是 statement)
binlog_format=mixed
二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days=7
跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中
断。
如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致
slave_skip_errors=1062
作为从服务器时的中继日志
relay_log=skiff‐mysql‐relay‐bin
log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
log_slave_updates=1
主键自增规则,避免主从同步ID重复的问题
auto_increment_increment=2 # 自增因子(每次加2) auto_increment_offset=1 # 自增偏移(从1开始),单数 systemctl restart mysqld mysql ‐uroot ‐pMastar@1994 grant replication slave, replication client on . to ‘repl’@’10.246.250.225’ identified by ‘Mastar@1994’; flush privileges;
查看binlog文件的position(偏移)和File(日志文件)的值,从机上需要
用到 show master status;
master_user和master_password:在225’上执行grant replication
slave…创建的用户和密码
master_log_file和master_log_pos:在225上运行show master status;
命令执行结果对应File和Position字段的值 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 1 2 3 4 5 6 1 2 3、slave节点配置(10.246.250.225) 3.1、添加数据同步配置 change master to master_host=’10.246.250.225’,master_user=’repl’, master_password=’Mastar@1994’, master_port=3306, master_log_file=’skiff‐mysql‐bin.000002’, master_log_pos=632, master_connect_retry=30; start slave; show slave status\G;
Slave_IO_Running: Yes Slave_SQL_Running: Yes 这两个选项是YES时
说明正常 vi /etc/my.cnf
服务器的ID,必须唯一,一般设置自己的IP
server_id=225
复制过滤:不需要备份的数据库(MySQL库一般不同步)
binlog‐ignore‐db=mysql
开启二进制日志功能,名字可以随便取,最好有含义(比如项目名)
log‐bin=skiff‐mysql‐bin
为每个 session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size=1M
主从复制的格式(mixed,statement,row,默认格式是 statement)
binlog_format=mixed
二进制日志自动删除/过期的天数。默认值为 0,表示不自动删除。
expire_logs_days=7
跳过主从复制中遇到的所有错误或指定类型的错误,避免 slave 端复制中
断。
如:1062 错误是指一些主键重复,1032 错误是因为主从数据库数据不一致
slave_skip_errors=1062
作为从服务器时的中继日志
relay_log=skiff‐mysql‐relay‐bin
log_slave_updates 表示 slave 将复制事件写进自己的二进制日志
log_slave_updates=1
主键自增规则,避免主从同步ID重复的问题
auto_increment_increment=2 # 自增因子(每次加2) auto_increment_offset=1 # 自增偏移(从1开始),单数 3 4 5 6 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 3.2、master配置 3.3、slave配置 4、验证 systemctl restart mysqld mysql ‐uroot ‐pMastar@1994 grant replication slave, replication client on . to ‘repl’@’10.246.250.224’ identified by ‘Mastar@1994’; flush privileges;
查看binlog文件的position(偏移)和File(日志文件)的值,从机上需要
用到 show master status;
Slave_IO_Running: Yes Slave_SQL_Running: Yes 这两个选项是YES时
说明正常
master_user和master_password:在224上执行grant replication
slave…创建的用户和密码
master_log_file和master_log_pos:在224上运行show master status;
命令执行结果对应File和Position字段的值 change master to master_host=’10.246.250.224’,master_user=’repl’, master_password=’Mastar@1994’, master_port=3306, master_log_file=’skiff‐mysql‐bin.000002’, master_log_pos=632, master_connect_retry=30; start slave; show slave status\G;
登录224创建一个数据库
shell> mysql ‐u root ‐p mysql> create database if not exists mydb default character set utf8 collate utf8_general_ci; mysql>use mydb; mysql> create table user (id int, username varchar(30), password varchar(30)); 1 2 3 4 5 6 7 1 2 3 4 5 1 2 3 4 5 安装keepalived 修改配置文件 mysql> insert into user values (1, ‘mmx’, ‘123456’);
下面是在225节点上的操作
#1、登录225查询所有库,是否包含mydb数据库 #2、切换到mydb库,是否包含user表,并有一条数据 #3、在225的mydb.user表插入一条数据,查看是否同步过去 mysql> insert into user values (2,’mmx1’,’123456’); yum ‐y install keepalived
开机启动
systemctl enable keepalived vi /etc/keepalived/keepalived.conf global_defs { } v rrp_instance VI_1 { state BACKUP interface enp0s3 virtual_router_id 51 priority 100 # 从节点配置90 nopreempt # 主节点配置,从节点不用配置 advert_int 1 authentication { auth_type PASS auth_pass 1111 } v irtual_ipaddress { 10.246.250.250 } } v irtual_server 10.246.250.250 3306 { delay_loop 6 6 7 8 9 10 11 1 2 3 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 添加脚本 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP real_server 10.246.250.224 3306 { # 从节点配置时换成从节点IP weight 1 notify_down /usr/local/keepalived/mysql.sh TCP_CHECK { connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } m kdir /usr/local/keepalived/ vi /usr/local/keepalived/mysql.sh #!/bin/bash pkill keepalived chmod +x /usr/local/keepalived/mysql.sh systemctl restart keepalived 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 1 2 3 4 5 6