龙空技术网

Ubuntu 下 MySQL, Mariadb 主从复制的部署及配置

zuoandwang 187

前言:

现时同学们对“ubuntumysql主从配置”大约比较重视,大家都想要学习一些“ubuntumysql主从配置”的相关内容。那么小编同时在网上搜集了一些关于“ubuntumysql主从配置””的相关内容,希望朋友们能喜欢,小伙伴们快快来了解一下吧!

准备工作Ubuntu 20.04 LTS 服务器两台, 使用 apt update && apt upgrade 安装最新的补丁修改两台服务器的名字分别为 mysql-1, mysql-2 安装MySQL/Mariadb

# 在 mysql-1, mysql-2 执行apt install mariadb-server -y# 用 apt install mysql-server -y 安装MySQL
配置主库服务器
# 在 mysql-1 上执行mysql # 进入mysql交互窗口# 创建用户 db_user, db_user_replUSE mysql;CREATE USER db_user IDENTIFIED BY 'db_user@123';CREATE USER db_user_repl IDENTIFIED BY 'db_user@123';# 给root用户创建密码,设置root用户可以从其它host登录ALTER USER 'root'@'localhost' IDENTIFIED BY 'db_user@123';UPDATE user SET host='%' WHERE user='root';# 给 db_user, db_user_repl 用户DDL权限GRANT ALL PRIVILEGES ON *.* TO 'db_user'@'%' IDENTIFIED BY 'db_user@123';GRANT SELECT on performance_schema.* TO 'db_user'@'%' IDENTIFIED BY 'db_user@123';GRANT ALL PRIVILEGES ON *.* to 'db_user_repl'@'%' IDENTIFIED BY 'db_user@123';GRANT SELECT on performance_schema.* TO 'db_user_repl'@'%' IDENTIFIED BY 'db_user@123';flush privileges;# 停止mariadb服务systemctl stop mariadb# 编辑mysql-1配置文件vim /etc/mysql/mariadb.conf.d/50-server.cnf# 添加或修改如下配置,以下配置需要位于[mysqld]下bind_address = 0.0.0.0server-id = 1log_bin = /var/log/mysql/mysql-bin.log# 启动mariadb服务systemctl start mariadb# 进入mysql-1交互窗口mysql -hmysql-1 -uroot -p# 输入密码db_user@123# 授权db_user_repl用户可以进行到 mysql-2 的复制# 注意:这里尽量使用hostname,不推荐使用IPGRANT REPLICATION SALVE ON *.* TO 'db_user_repl'@'mysql-2' IDENTIFIED BY 'db_user@123';# 查看最新binlog列表,或者show master logs查看binlog列表show master status;+------------------+----------+--------------+------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |+------------------+----------+--------------+------------------+| mysql-bin.000001 | 651 | | |+------------------+----------+--------------+------------------+# 查看binlog日志show binlog events in 'mysql-bin.000001';+------------------+-----+-------------------+-----------+-------------+------------------------------------| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |+------------------+-----+-------------------+-----------+-------------+------------------------------------| mysql-bin.000001 | 4 | Format_desc | 1 | 256 | Server ver: 10.3.30-MariaDB- | mysql-bin.000001 | 256 | Gtid_list | 1 | 285 | [] | mysql-bin.000001 | 285 | Binlog_checkpoint | 1 | 328 | mysql-bin.000001 | mysql-bin.000001 | 328 | Gtid | 1 | 370 | GTID 0-1-1 | mysql-bin.000001 | 370 | Query | 1 | 455 | drop database hive | mysql-bin.000001 | 455 | Gtid | 1 | 497 | GTID 0-1-2 +------------------+-----+-------------------+-----------+-------------+------------------------------------
完整同步主从数据库
# 在主数据库mysql-1上执行,完整导出主数据库mysqldump -uroot -p -A > all-database.sql# 输入密码 db_user@123# 从 mysql-1 复制 all-database.sql 到 mysql-2scp ./all-database.sql root@mysql-2:/root/# 在从数据库mysql-2上执行,完整导入主数据库mysql -uroot -p < all-database.sql# 输入密码 db_user@123
配置从数据库 mysql-2
# 在从数据库 mysql-2 执行# 停止mariadb服务systemctl stop mariadb# 编辑mysql-1配置文件vim /etc/mysql/mariadb.conf.d/50-server.cnf# 添加或修改如下配置,以下配置需要位于[mysqld]下bind_address = 0.0.0.0server-id = 2 # 这个地方一定要跟mysql-1不同read_only=ON #(主到从是单向同步,从数据库设置只读,防止数据写入从服务器,主从数据不一致问题,但是mysql的root仍旧可以写入)# 启动mariadb服务systemctl start mariadb# 进入mysql-2交互窗口mysql -hmysql-2 -uroot -p# 输入密码db_user@123# 在mysql-2交互窗口执行,设置要同步的主服务器CHANGE MASTER TOMASTER_HOST='mysql-1', # MASTER_HOST尽量不设置ip,使用域名并在主机上设置dnsMASTER_USER='db_user_repl', # 用来复制的用户MASTER_PASSWORD='db_user@123',MASTER_PORT=3306,MASTER_LOG_FILE='mysql-bin.000001', # 在主mysql-1上执行 show master status 得到的结果MASTER_LOG_POS=62, # 在主mysql-1上执行 show master status 得到的结果MASTER_CONNECT_RETRY=10;# 启动从服务器start slave;# 查看从服务器的状态show slave status\G# Slave_IO_Running: Yes #负责与主机的io通信# Slave_SQL_Running: Yes #负责自己的slave mariadb进程
检查主从复制状态
# 在主 mysql-1 的交互窗口执行,结果中需要出现 [Binlog Dump] Commandshow processlist;# 在从 mysql-2 的交互窗口执行,结果中需要出现 [Slave_IO],[Slave_SQL] Commandshow processlist;
验证主从复制
# 在主 mysql-1 上执行CREATE SCHEMA test_repl_db;USE test_repl_db;CREATE TABLE test1 (id int, name char);INSERT INTO test1(id, name) VALUES (1, 'p');# 在从 mysql-2 上执行USE test_repl_db;SELECT * FROM test1;
# 显示正在运行的mysql processshow processlist;select id, db, user, host, command, time, state, info from information_schema.processlist

标签: #ubuntumysql主从配置