一、CentOS7下安装mysql8
1.1 安装前清理工作
rpm -pa | grep mysql
查找出安装的mysql相关软件包依赖包,
yum remove mysql-xxx-xxx-
删除找到的软件依赖包
find / -name mysql
查找mysql相关目录,
rm -rf /var/lib/mysql
删除目录
1.2 安装mysql8
1.2.1 先去官网下载mysql的repo源并安装,
mysql repo下载地址
1.2.2 下载好的mysql repo文件上传到Centos,安装 yum repo文件并更新 yum 缓存
rpm -ivh mysql80-community-release-el7-3.noarch.rpm
执行后在 /etc/yum.repos.d/ 目录下生成两个repo文件
repo文件
更新 yum 命令
yum clean all
yum makecache
1.2.3 使用 yum安装mysql
yum install mysql-community-server
安装mysql
1.2.4 配置my.cnf
lower_case_table_names = 1 #是否大小写敏感,1为非大小写敏感,默认0大小写敏感,mysql8在第一次启动就要配置好,后面更改了就会报错
mysql8 中大小写敏感配置要在第一次启动前配置好
systemctl start mysqld.service
启动mysql
1.2.5 修改初始密码
cat /var/log/mysqld.log | grep password
找到默认密码
mysql -u root -p
使用默认密码登录
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
修改初始密码
SHOW GRANTS FOR `root`; -- 查看用户权限
CREATE USER `root`@`%` IDENTIFIED BY '1qaz@WSX'; -- 创建用户
GRANT ALL ON *.* TO `root`@`%` WITH GRANT OPTION;-- 修改用户权限
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1qaz@WSX'; -- 修改用户密码校验方式
以上可能会用到的用户权限相关sql
3. mysql主主负载
3.1 部署好两台相同的mysql服务
假设
服务器A:192.168.1.1
服务器B:192.168.1.2
CREATE USER 'sync'@'192.168.1.2' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.1.2';
在服务器A上创建同步账号,并添加权限
CREATE USER 'sync'@'192.168.1.1' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.1.1';
在服务器B上创建同步账号,并添加权限
3.2 配置my.cnf
[mysqld]
user = mysql #mysql使用的用户名
bind_address = 0.0.0.0 #监听IP,此处不能用127.0.0.1因为需要外部机器访问
default_authentication_plugin = mysql_native_password
server-id = 2 #server-id,必须是大于0的一个整数,两台服务器不能设置一样,一般一个设1,另一个设2就可以
log_bin = mysql-bin #二进制日志名,最终会在/usr/local/mysql/data/中以mysql-bin.000001这种文件名形式存在,扩展名是一个编号
binlog_format = mixed #混合型日志格式,具体含义可自行查询
binlog_expire_logs_seconds = 604800 #日志过期时间
sync-binlog = 1
innodb_flush_log_at_trx_commit = 1
# Master DB #
#需要同步的数据库用多个binlog-do-db,不要写在一行用逗号分隔,这种情况可能会导致数据库同步状态一切正常,就是同步不了,日志也没有任何问题,根据实验发现,如果写成binlog-do-db = database1,database2
在使用show master status以及show slave status时与下面设置方式完全一样,但就是无法同步
binlog-do-db = sjy #需要同步的数据库
binlog-do-db = sjy_test #需要同步的数据库
#由于两个服务器都可以写数据,为了防止自增的key冲突,需要设置下面两个,increment是每次增长数,两台服务器设为2即可,offset是起始偏移,一个服务器设置为1,另一个设置为2,这样自增id在服务器A上是1、3、5这样,在服务器B上就是2、4、6不会产生冲突
auto-increment-increment = 2
auto-increment-offset = 2
# Slave DB #
replicate-do-db = sjy #需要从其他服务器同步过来的数据库名
replicate-do-db = sjy_test
relay_log = relay-bin #中继日志名称
lower_case_table_names = 1 #是否大小写敏感,1为非大小写敏感,默认0大小写敏感,mysql8在第一次启动就要配置好,后面更改了就会报错
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
server-id 两台服务器设置不同的值,一个设置1,一个设置2
auto-increment-increment 主键增长数,两台设置相同值
auto-increment-offset 偏移量设置不同值,一个设置1,一个设置2
3.3 配置主从服务信息,开启服务
服务器A为主服务时中执行
SHOW MASTER STATUS\G
查看主服务信息
*************************** 1. row ***************************
File: mysql-bin.000004
Position: 2165741
Binlog_Do_DB: sjy,sjy_test
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
记下File和Position值,在B服务器上设置,
CHANGE MASTER TO MASTER_HOST='192.168.100.1',MASTER_USER='sync',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=2165741;
MASTER_HOST 主服务器IP,即为对方服务器IP
MASTER_USER 我们创建的同步用户
MASTER_PASSWORD 用户密码
MASTER_LOG_FILE 主服务器上查到的日志文件名
MASTER_LOG_POS 主服务器上查到的日志位置
同理,在服务器B上执行SHOW MASTER STATUS,把信息配置到服务器A上。
start slave;
两个服务器分别执行,开启slave。
3.4 检验开启状态
show slave status\G
分别在两台服务器上执行,查看 Slave_IO_Running 和 Slave_SQL_Running 这两个值是否都为YES;
在服务器A中修改数据,数据库B是否数据一致,在数据库B中修改数据,数据库A中是否数据一致。
网友评论