操作系统:ubuntu 16.04
两台服务器ip分别为:
192.168.0.105
192.168.0.106
虚拟ip为:192.168.0.250
百度网盘
提取码:22th
依次执行下面11条命令
sudo dpkg -i mysql-community-client-core_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-common_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-community-client_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i libmysqlclient21_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i libmysqlclient-dev_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i libaio1_0.3.110-2_amd64.deb
sudo dpkg -i libmecab2_0.996-1.2ubuntu1_amd64.deb
sudo dpkg -i mysql-client_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-community-server-core_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-community-server_8.0.18-1ubuntu16.04_amd64.deb
sudo dpkg -i mysql-server_8.0.18-1ubuntu16.04_amd64.deb
注:执行第10条命令时,会提示设置密码,如下图,选择5.x版本的加密方式:
安装完成后启动mysql
service mysql start
使用mysql数据库
use mysql;
然后分别为另一主机创建一个链接用户,该帐户必须授予REPLICATION SLAVE权限,因为mysql8在授权语句中不能出现IDENTIFIED BY ‘password’; 因此创建用户和授予权限需要分开执行:
CREATE USER 'replicate'@'192.168.0.106' IDENTIFIED WITH 'mysql_native_password' BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'192.168.0.106';
CREATE USER 'replicate'@'192.168.0.105' IDENTIFIED WITH 'mysql_native_password' BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'replicate'@'192.168.0.105';
【注意】 对用户做了权限变更之后,一定记得重新加载一下权限,将权限信息从内存中写入数据库。
flush privileges;
开启允许远程访问(默认未开启)
update user set host='%' where user ='root';
创建完成后我们可以通过使用对方主机对本机数据库进行访问,看下是否能链接成:
mysql -h 192.168.0.106 -ureplicate -proot
mysql -h 192.168.0.105 -ureplicate -proot
找到mysql配置文件,在[mysqld]中添加(修改)如下内容:
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
server-id=1 # 唯一id
innodb_flush_log_at_trx_commit=2 # 默认为1
log-bin=mysql-bin-1 #binlog日志文件名(可以任意命名)
#binlog-do-db=test # 记录日志的数据库(如果没有此项,表示同步所有的库)
binlog-ignore-db=mysql,information_schema,performance_schema,sys # 不记录日志的数据库
sync_binlog=1 #开启binlog日志同步功能
slave_skip_errors=1146 # 跳过1146错误
server-id=2 # 唯一id
innodb_flush_log_at_trx_commit=2 # 默认为1
log-bin=mysql-bin-2 #binlog日志文件名(可以任意命名)
#binlog-do-db=test # 记录日志的数据库
binlog-ignore-db=mysql,information_schema,performance_schema,sys # 不记录日志的数据库
sync_binlog=1 #开启binlog日志同步功能
slave_skip_errors=1146 # 跳过1146错误
两台服务器分别执行:
service mysql restart
show master status\G
进入mysql操作界面(mysql -uroot -p)
stop slave;
然后:
change master to master_host='192.168.0.106',master_user='replicate',
master_password='root',master_log_file='mysql-bin-2.000001',master_log_pos=155;
重启从服务线程:
start salve;
stop slave;
然后:
change master to master_host='192.168.0.105',master_user='replicate',
master_password='root',master_log_file='mysql-bin-1.000001',master_log_pos=155;
重启从服务线程:
start salve;
show slave status\G
在192.168.0.105服务器上,连接数据库:
mysql -uroot -proot
创建一个测试库db_test
create database db_test;
创建一张测试表tb_user
create table tb_user (id int,name varchar(20));
插入一条数据
insert into tb_user(id,name) values (1, 'tomcat');
查看数据
select * from tb_user;
在192.168.0.106服务器上,验证mysql是否同步数据
连接数据库:
mysql -uroot -proot
百度网盘
提取码:oz2c
sudo dpkg -i keepalived_1%3a1.2.24-1ubuntu0.16.04.2_amd64.deb
sudo vim /etc/keepalived/keepalived.conf
以上均需要在两台服务器上分别执行。
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_mysql_port { #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
script "/opt/chk_mysql.sh" #这里通过脚本监测
interval 2 #脚本执行间隔,每2s检测一次
weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 100
advert_int 1
nopreempt #不抢占模式,只有优先级高的机器上设置即可,优先级低的机器可不设置
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.250
}
track_script {
chk_mysql_port
}
}
global_defs {
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_mysql_port { #检测mysql服务是否在运行。有很多方式,比如进程,用脚本检测等等
script "/opt/chk_mysql.sh" #这里通过脚本监测
interval 2 #脚本执行间隔,每2s检测一次
weight -5 #脚本结果导致的优先级变更,检测失败(脚本返回非0)则优先级 -5
fall 2 #检测连续2次失败才算确定是真失败。会用weight减少优先级(1-255之间)
rise 1 #检测1次成功就算成功。但不修改优先级
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.0.250
}
track_script {
chk_mysql_port
}
}
两台服务器分别编写检测脚本
sudo vim /opt/chk_mysql.sh
#!/bin/bash
counter=$(netstat -na|grep "LISTEN"|grep "3306"|wc -l)
if [ "${counter}" -eq 0 ]; then
/etc/init.d/keepalived stop
fi
添加执行权限
chmod +x /opt/chk_mysql.sh
启动keepalived
service keepalived start
查看日志
tail -f /var/log/messages
如果没有messages文件,则修改文件/etc/rsyslog.d/50-default.conf
sudo vim /etc/rsyslog.d/50-default.conf
取消/var/log/messages注释
重启rsyslog服务
sudo service rsyslog restart
mysql -h192.168.0.250 -uroot -proot
service mysql stop
配置本地数据源
Ubuntu18.04-离线安装mysql-8.0
centos7下mysql双主+keepalived
mysql+keepalived实现双主自由切换
mysql双机热备以及使用keepalived实现mysql双主高可用