面试题答案
一键面试- 停止MariaDB服务
- 在不同版本的MariaDB中,停止服务的命令基本类似。例如在基于systemd的系统(如CentOS 7+、Ubuntu 16.04+等):
sudo systemctl stop mariadb
- 在基于SysV init的系统(如CentOS 6等):
sudo service mariadb stop
- 在不同版本的MariaDB中,停止服务的命令基本类似。例如在基于systemd的系统(如CentOS 7+、Ubuntu 16.04+等):
- 备份损坏文件
- 将
master.info
与relay - log.info
文件移动到一个备份目录,以防修复过程中出现问题导致数据丢失。假设备份目录为/var/lib/mysql/backup
:sudo mkdir -p /var/lib/mysql/backup sudo mv /var/lib/mysql/master.info /var/lib/mysql/backup/master.info.bak sudo mv /var/lib/mysql/relay - log.info /var/lib/mysql/backup/relay - log.info.bak
- 将
- 从备份或主库获取必要信息
- 如果有备份:
- 检查备份中的
master.info
与relay - log.info
文件,获取主库的连接信息(如主库IP、端口、用户名、密码)、主库日志文件名及位置、从库中继日志相关信息等。
- 检查备份中的
- 如果没有备份,从主库获取信息:
- 在主库上执行
SHOW MASTER STATUS;
,记录下File
和Position
字段的值,这将用于重新配置从库连接主库的起始位置。例如:mysql -u root -p SHOW MASTER STATUS;
- 在主库上执行
- 如果有备份:
- 修复
master.info
文件- 文件格式:
master.info
文件在不同版本MariaDB中格式基本固定,每行一个配置项。典型格式如:master_host=192.168.1.100 master_user=repl_user master_password=repl_password master_log_file=mysql - bin.000001 master_log_pos=1234
- 根据从备份或主库获取的信息,重新创建
master.info
文件。假设主库IP为192.168.1.100
,复制用户为repl_user
,密码为repl_password
,主库日志文件为mysql - bin.000001
,位置为1234
:sudo touch /var/lib/mysql/master.info sudo chown mysql:mysql /var/lib/mysql/master.info sudo chmod 600 /var/lib/mysql/master.info echo "master_host=192.168.1.100" | sudo tee -a /var/lib/mysql/master.info echo "master_user=repl_user" | sudo tee -a /var/lib/mysql/master.info echo "master_password=repl_password" | sudo tee -a /var/lib/mysql/master.info echo "master_log_file=mysql - bin.000001" | sudo tee -a /var/lib/mysql/master.info echo "master_log_pos=1234" | sudo tee -a /var/lib/mysql/master.info
- 文件格式:
- 修复
relay - log.info
文件- 文件格式:
relay - log.info
文件记录从库中继日志相关信息,格式也较为固定,每行一个配置项。例如:relay_log_name=/var/lib/mysql/relay - log.000001 relay_log_pos=5678 master_log_name=mysql - bin.000001 master_log_pos=1234
- 根据备份信息或主库获取的信息以及从库当前状态,重新创建
relay - log.info
文件。假设从库中继日志名为/var/lib/mysql/relay - log.000001
,中继日志位置为5678
,主库日志文件及位置同上述master.info
文件配置:sudo touch /var/lib/mysql/relay - log.info sudo chown mysql:mysql /var/lib/mysql/relay - log.info sudo chmod 600 /var/lib/mysql/relay - log.info echo "relay_log_name=/var/lib/mysql/relay - log.000001" | sudo tee -a /var/lib/mysql/relay - log.info echo "relay_log_pos=5678" | sudo tee -a /var/lib/mysql/relay - log.info echo "master_log_name=mysql - bin.000001" | sudo tee -a /var/lib/mysql/relay - log.info echo "master_log_pos=1234" | sudo tee -a /var/lib/mysql/relay - log.info
- 文件格式:
- 清理中继日志(可选但推荐)
- 在重新配置复制前,建议清理从库现有的中继日志,避免可能的冲突。可以使用
PURGE RELAY LOGS
语句,但要注意不要误删除重要数据。mysql -u root -p RESET SLAVE;
- 在重新配置复制前,建议清理从库现有的中继日志,避免可能的冲突。可以使用
- 启动MariaDB服务并重新配置复制
- 启动MariaDB服务:
- 在基于systemd的系统:
sudo systemctl start mariadb
- 在基于SysV init的系统:
sudo service mariadb start
- 在基于systemd的系统:
- 登录到从库的MariaDB,重新配置复制:
mysql -u root -p CHANGE MASTER TO MASTER_HOST='192.168.1.100', MASTER_USER='repl_user', MASTER_PASSWORD='repl_password', MASTER_LOG_FILE='mysql - bin.000001', MASTER_LOG_POS=1234; START SLAVE;
- 启动MariaDB服务:
- 检查复制状态
- 执行
SHOW SLAVE STATUS \G;
检查复制是否正常工作。关注以下关键字段:Slave_IO_Running
和Slave_SQL_Running
都应该为Yes
。Seconds_Behind_Master
应该为0或者一个较小的值(表示从库落后主库的时间,在正常同步情况下不应过大)。
SHOW SLAVE STATUS \G;
- 执行
以上步骤可以在不同版本的MariaDB中通用,但要注意具体路径、命令语法等可能因操作系统和MariaDB版本略有差异,操作前最好查阅对应版本的官方文档进行确认。