找回密码
 立即注册
首页 业界区 安全 搭建MySQL主从

搭建MySQL主从

裒噎 5 天前
本文分享自天翼云开发者社区《搭建MySQL主从》,作者:2****m
—— 本文基于MySQL 5.7.36进行演示

1、下载MySQL安装包

官网网址:https://downloads.mysql.com/archives/community
2、解压MySQL安装包

将以下包上传至服务器:
mysql-community-common-5.7.43-1.el7.x86_64.rpm
mysql-community-libs-5.7.43-1.el7.x86_64.rpm
mysql-community-client-5.7.43-1.el7.x86_64.rpm
mysql-community-server-5.7.43-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.43-1.el7.x86_64.rpm
mysql-community-devel-5.7.43-1.el7.x86_64.rpm
3、安装MySQL

1)安装net-tools
  1. yum install net-tools -y
复制代码
2)删除MySQL和mariadb
  1. rpm -qa | grep mysql | xargs rpm -e --nodeps
  2. rpm -qa | grep mariadb| xargs rpm -e --nodeps
复制代码
3)按顺序执行以下命令:
  1. rpm -ivh  mysql-community-common-5.7.43-1.el7.x86_64.rpm
  2. rpm -ivh  mysql-community-libs-5.7.43-1.el7.x86_64.rpm
  3. rpm -ivh  mysql-community-client-5.7.43-1.el7.x86_64.rpm
  4. rpm -ivh  mysql-community-server-5.7.43-1.el7.x86_64.rpm
  5. rpm -ivh  mysql-community-libs-compat-5.7.43-1.el7.x86_64.rpm
  6. rpm -ivh  mysql-community-devel-5.7.43-1.el7.x86_64.rpm
复制代码
4)命令成功执行后,则安装成功

4、修改my.cnf文件
  1. # 修改my.cnf文件:
  2. vim /etc/my.cnf
  3. # 配置内容如下:
  4. [mysqld]
  5. port=9001
  6. max_connections=1000
  7. max_connect_errors=10
  8. character-set-server=UTF8MB4
  9. default-storage-engine=INNODB
  10. default_authentication_plugin=mysql_native_password
  11. server-id = 20001 #主从节点的server-id不同
  12. log-bin=mysql-bin
  13. auto_increment_offset=1
  14. auto_increment_increment=2
  15. sync_binlog=1
  16. innodb_flush_log_at_trx_commit=1
  17. binlog_format=MIXED
  18. log-slave-updates=true
  19. open_files_limit=655350
  20. sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
  21. datadir=/data/mysql
  22. socket=/var/lib/mysql/mysql.sock
  23. log-error=/var/log/mysqld.log
  24. pid-file=/var/run/mysqld/mysqld.pid
复制代码
5、初始化MySQL密码

1)启动mysqld服务
  1. systemctl start mysqld
复制代码
2)查看MySQL初始密码
  1. cat /var/log/mysqld.log | grep localhost
复制代码
6、MySQL权限控制

1)登录MySQL客户端
  1. sudo mysql -uroot -p;
复制代码
2)修改密码
  1. # 生产环境必须设置强密码!!!
  2. ALTER USER "root"@"localhost" IDENTIFIED BY "密码";
  3. flush privileges;
复制代码
3)切换数据库
  1. use mysql;
复制代码
4)设置允许远程访问
  1. UPDATE user SET host = '%' WHERE user = 'root';
  2. flush privileges;
  3. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
  4. flush privileges;
复制代码
5)新建户mysql用户(用于建立主从状态)
  1. # 生产环境必须设置强密码!!!
  2. CREATE USER 'mysql'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
  3. GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'%' WITH GRANT OPTION;
  4. flush privileges;
复制代码
7、配置主从(在从库执行以下命令)

1)登录MySQL客户端
  1. sudo mysql -umysql -p;
复制代码
2)切换至mysql数据库,并建立主从连接
  1. use mysql;
  2. # 生产环境必须设置强密码!!!
  3. # MASTER_LOG_FILE和MASTER_LOG_POS可在master节点通过 show master status 命令查看。
  4. CHANGE MASTER TO
  5. MASTER_HOST = '主节点ip',
  6. MASTER_USER = 'mysql',
  7. MASTER_PASSWORD = '密码',
  8. MASTER_PORT = 9001,
  9. MASTER_LOG_FILE='mysql-bin.000005',
  10. MASTER_LOG_POS=528,
  11. MASTER_RETRY_COUNT = 60,
  12. MASTER_HEARTBEAT_PERIOD = 10000;
复制代码
3)启动slave
  1. start slave;
复制代码
4)查看主从状态
  1. # 如果输出结果中Slave_IO_Running和Slave_SQL_Running值都为YES,则主从状态正常
  2. show slave status;
复制代码
8、安装数据同步工具-percona
  1. # 上传libev-4.15-7.el7.x86_64.rpm安装包
  2. # 下载路径:http://rpmfind.net/linux/rpm2html/search.php?query=libev.so.4%28%29%2864bit%29&submit=Search+...&system=&arch=
  3. cd /usr/local/app_isntall
  4. # 安装libev
  5. rpm -ivh libev-4.15-7.el7.x86_64.rpm
  6. # 安装percona
  7. yum install -y https://repo.percona.com/yum/percona-release-latest.noarch.rpm
  8. # 安装percona-xtrabackup-24
  9. yum install -y percona-xtrabackup-24
复制代码
9、数据同步

1)数据备份

主节点数据备份
以下操作在主节点上执行
  1. # 创建数据备份目录
  2. mkdir -p /data/mysql_master_bak
  3. # 创建备份用户
  4. CREATE USER 'mysql_bak'@'%' IDENTIFIED WITH mysql_native_password BY '密码';
  5. GRANT ALL PRIVILEGES ON *.* TO 'mysql_bak'@'%' WITH GRANT OPTION;
  6. flush privileges;
  7. # 数据备份
  8. innobackupex --defaults-file=/etc/my.cnf --user=mysql_bak --password='密码'  --compress --parallel=20 --throttle=20 --rsync /data/mysql_master_bak 2>/data/mysql_master_bak/error.log
  9. # 数据验证,查看是否有报错
  10. cat /data/mysql_master_bak/error.log
  11. # error.log日志中有记录MASTER_LOG_FILE和MASTER_LOG_POS的值。
  12. 230822 10:34:48 Backup created in directory '/data/mysql_master_bak/2023-08-22_10-34-47/'
  13. MySQL binlog position: filename 'mysql-bin.000002', position '16007'
  14. 230822 10:34:48 [00] Compressing /data/mysql_master_bak/2023-08-22_10-34-47/backup-my.cnf.qp
  15. 230822 10:34:48 [00]        ...done
  16. 230822 10:34:48 [00] Compressing /data/mysql_master_bak/2023-08-22_10-34-47/xtrabackup_info.qp
  17. 230822 10:34:48 [00]        ...done
  18. xtrabackup: Transaction log of lsn (2797339) to (2797348) was copied.
  19. 230822 10:34:50 completed OK!
  20. # 主库数据同步至备机
  21. nohup rsync -e ssh -avr /data/mysql_master_bak/xxx/ 从节点ip:/data/mysql_slave_bak/xxx
  22. # 数据验证,查看是否有报错
  23. cat nohup.out
复制代码
从节点数据备份
以下操作在从节点上执行
  1. # 创建数据备份目录
  2. mkdir -p /data/mysql_slave_bak
复制代码
2)数据加载

从节点数据备份
以下操作在从节点上执行
  1. # 安装qpress
  2. yum install qpress -y
  3. # 解压缩
  4. nohup innobackupex --decompress --parallel=20 /data/mysql_slave_bak/xxx &
  5. # 数据恢复
  6. innobackupex --apply-log /data/mysql_slave_bak/xxx
  7. # 停止slave
  8. stop slave;
  9. # 停止mysql
  10. systemctl stop mysqld
  11. # 原始目录备份
  12. mv /data/mysql /data/mysql_bak
  13. # 数据源切换
  14. mv /data/mysql_slave_bak/xxx /data/mysql
  15. # 给数据源赋权
  16. chown -R mysql:mysql /data/mysql
复制代码
3)数据同步

从节点数据备份
以下操作在从节点上执行
  1. # 启动mysql
  2. systemctl start mysqld
  3. # 恢复主从状态
  4. mysql -umysql -p
  5. CHANGE MASTER TO
  6. MASTER_HOST = '主节点ip',
  7. MASTER_USER = 'mysql',
  8. MASTER_PASSWORD = '密码',
  9. MASTER_PORT = 9001,
  10. MASTER_LOG_FILE='mysql-bin.xxx',
  11. MASTER_LOG_POS=xxx, # 填写第一步骤查看到的值
  12. MASTER_RETRY_COUNT = 60,
  13. MASTER_HEARTBEAT_PERIOD = 10000;
  14. # 启动slave
  15. start slave;
  16. # 通过查看主数据库的条数来判断数据是否同步
  17. select count(*) from xxx;
复制代码
4)数据回滚

从节点数据备份
以下操作在从节点上执行
  1. # 将数据源进行更换,重复第二步骤即可。
复制代码
10、常用命令
  1. # 导出
  2. mysqldump –u [username] –p [password] databaseName > [objectName];
  3. # 导入
  4. source [objectName];
  5. # 锁表(防止数据写入)
  6. flush tables with read lock;
  7. # 解表
  8. unlock tables;
  9. # 跳过错误,恢复主从状态
  10. set global sql_slave_skip_counter=1;
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册