Ubuntu20.04安装Mysql8主从
一.主数据库安装
1.下载安装包并初始化数据库
- # 进入目录
- cd /opt
- # 下载安装包
- wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
- # 解压
- tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
- # 拷贝到/usr/local
- mv /opt/mysql-8.0.20-linux-glibc2.12-x86_64 /usr/local
- # 进入/usr/local
- cd /usr/local
- # 修改名称为mysql-8.0.20
- mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20
- # 创建存放数据文件夹
- mkdir /usr/local/mysql-8.0.20/data
- # 创建用户及用户组
- groupadd mysql
- useradd -g mysql mysql
- # 授权
- chown -R mysql.mysql /usr/local/mysql-8.0.20
- # 初始化数据库(记录临时密码)
- cd /usr/local/mysql-8.0.20/
- ./bin/mysqld --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql-8.0.20/ --datadir=/usr/local/mysql-8.0.20/data/ --initialize
复制代码
2.修改配置文件
- # 清空,使用下面内容
- [mysqld]
- basedir=/usr/local/mysql-8.0.20
- datadir=/usr/local/mysql-8.0.20/data
- character-set-server=utf8
- lower-case-table-names=1
- default_authentication_plugin=mysql_native_password
- # 主从复制-主机配置
- # 主服务器唯一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=xxl_job
- binlog-do-db=nacos
- # 设置logbin格式
- binlog_format=STATEMENT
复制代码 3.创建并启动Mysql服务
- # 建立Mysql服务
- cp -a ./support-files/mysql.server /etc/init.d/mysql
- chmod +x /etc/init.d/mysql
- # 启动、停止、重启
- systemctl start mysql.service
- systemctl restart mysql.service
- systemctl stop mysql.service
- # 创建软连接
- ln -s /usr/local/mysql-8.0.20/bin/mysql /usr/bin
复制代码- # 登录(使用临时密码)
- mysql -uroot -p
- # 修改密码
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password';
- # 退出,使用新密码登录
- quit
- mysql -uroot -p
- # 修改root权限,增加远程连接(从服务器为了安全可以不必执行)
- use mysql
- update user set host ='%' where user='root';
- ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'cquisse';
- flush privileges;
- # 退出
- quit
复制代码 二.从数据库安装
安装步骤和主数据库的安装步骤基本一样,但配置文件内容不同,以及不必开启远程连接。- [mysqld]
- basedir=/usr/local/mysql-8.0.20
- datadir=/usr/local/mysql-8.0.20/data
- character-set-server=utf8
- lower-case-table-names=1
- default_authentication_plugin=mysql_native_password
- # 主从复制-从机配置
- # 从服务器唯一ID
- server-id=2
- # 启用中继日志
- relay-log=mysql-relay
复制代码 三.配置主从复制
1.检查防火墙
- 关闭主从数据库服务器防火墙或开放3306端口
这里以firewall为例- # 查看防火墙状态
- systemctl status firewalld
- # 关闭防火墙
- systemctl stop firewalld
复制代码- #往防火墙添加3306端口
- firewall-cmd --add-port=3306/tcp --permanent
- #重新加载防火墙配置
- firewall-cmd --reload
复制代码 2.数据库测试是否已经可以访问
- # 从数据库服务器测试主数据库
- mysql -uroot -p -h<主服务器IP> -P3306
复制代码 3.主数据库创建用户slave并授权
- # 登录
- mysql -uroot -p
- # 创建用户
- create user 'slave'@'%' IDENTIFIED WITH mysql_native_password by 'password';
- # 授权
- grant replication slave on *.* to 'slave'@'%';
- # 刷新权限
- flush privileges;
复制代码
- 从数据库验证slave用户是否可用
- mysql -uslave -p -h<主服务器IP> -P3306
复制代码 4.开始配置主从
- 主数据库查询服务ID及Master状态
- # 登录
- mysql -uroot -p
- # 查询server_id是否可配置文件中一致
- show variables like 'server_id';
- # 若不一致,可设置临时ID(重启失效)
- set global server_id = 1;
- # 查询Master状态,并记录 File 和 Position 的值
- show master status;
- # 注意:执行完此步骤后退出主数据库,防止再次操作导致 File 和 Position 的值发生变化
复制代码 - 从数据库中设置主数据库
- # 登录
- mysql -uroot -p
- # 查询server_id是否可配置文件中一致
- show variables like 'server_id';
- # 若不一致,可设置临时ID(重启失效)
- set global server_id = 2;
- # 设置主数据库参数
- change master to master_host='主数据库IP',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状态
- show slave status\G
- # 查看是否配置成功
- # 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异常值。
复制代码 - 测试
通过工具连接主从数据库或者在服务器连接。
注意:主数据库的配置文件中配置了需要同步的数据库,因此只会同步配置的数据库,不配置则同步全部。
- # 在主数据库创建数据库test
- create database test;
- # 从数据库查看
- show databases;
- # 在主数据库创建表
- use test;
- create table t_user(id int, name varchar(20));
- # 插入数据
- insert into t_user values(1, 'C3Stones');
- # 在从数据库查看
- use test;
- select * from t_user;
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |