• 系统:Ubuntu 18.04 TLS

  • MySQL版本:8.0

  • 机器:百度云1C2G*2

准备工作

  • SSH连接主库服务器

ssh -p[ssh port] [username]@[vps ip]

  • 更新源和系统组件

apt-get update

apt-get upgrade

  • 安装最新的Vim

apt install vim

MySQL8.0安装

⚠️如过直接使用apt install mysql-server来安装恭喜你踩坑了这样安装版本是5.7因为 apt的源没有更新到8.0

  • 为系统添加8.0的源

  • 打开浏览器

  • wgetcurl Ubuntu / Debian (Architecture Independent), DEB Package项的Download的链接,到一个文件夹,比如/opt

  • dpkg -i [Package Path]

  • 步骤如下图所示

选择MySQL Server&Cluster

OK

OK

  • 更新源

    apt-get update

    ⚠️如果可看到mysql-8.0xxxx那就是成功了

  • 安装

    apt install mysql-server

  • 如图

输入root密码

重复输入

建议选择5.7密码的方式

  • 等会儿安装就完成了

主库配置

  • 修改my.cnf配置文件

修改主数据库mysql配置,找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下两行

[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id
  • 重启MySQL

    service mysql restart

  • 添加同步用户

CREATE USER 'sync'@'192.168.1.6' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'192.168.1.6';
flush privileges;

⚠️ 其中192.168.1.6是从库主机的IP

  • 查看master装填并记录二进制文件名和位置

  • 打开MySQL会话

  • mysql -uroot -p

  • 查看master装填

  • show master status;

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      511 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

⚠️️把File和Position的名字记住配置从库时要用到

从库数据库安装

  • 请参考主库的安装流程

从库配置

  • 修改mysql配置

  • 同样找到my.cnf配置文件并修改

[mysqld]
server-id=2 #设置server-id,必须唯一
  • 重启从库

service mysql restart

  • 打开MySQL会话配置从库
CHANGE MASTER TO
MASTER_HOST='master2.example.com',
MASTER_USER='replication',
MASTER_PASSWORD='password',
MASTER_PORT=3306,
MASTER_LOG_FILE='master2-bin.001',
MASTER_LOG_POS=4,
MASTER_CONNECT_RETRY=10;
  • 解释

    • MASTER_HOST 主库IP
    • MASTER_USER 用于同步的账户
    • MASTER_PASSWORD 账户密码
    • MASTER_PORT 用来同步的端口
    • MASTER_LOG_FILE 刚才记录的主库File
    • MASTER_LOG_POS 刚才记录的主库Position
    • MASTER_CONNECT_RETRY 超时等待时间
  • 启动slave同步进程

start slave;
#这是停止 stop slave;

  • 查看slave状态

show slave status\G;

Slave_IO_State: Waiting for master to send event
Master_Host: 172.16.0.7
Master_User: sync
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 15258
Relay_Log_File: instance-qdlp974n-relay-bin.000003
Relay_Log_Pos: 15472
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes # Yes Succces
Slave_SQL_Running: Yes # Yes Succces

⚠️ Slave_IO_RunningSlave_SQL_Running都是Yes说明成了

写入测试

在主库新建一个表插入一些数据观察从库是否可以同步过去,效果就是主库和从库数据库和表以及表里的数据应该是一样且同步的。