前期准备

  1. 三台服务器,服务器使用的是 centos7
  2. mysql-5.7.24-linux-glibc2.12-x86_64 安装包 使用是版本是 mysql-5.7.24

数据库安装

  1. 将 mysql 安装包上传到三台服务器上,我使用 FlashFXP 作为上传工具
  2. 解压安装包
  tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
  1. 创建需要安装的路径,之后移动刚才解压的文件夹,同时重命名
  mkdir /app     #创建一个文件夹专门用来存放安装的程序
mv mysql-5.7.24-linux-glibc2.12-x86_64 /app/mysql #移动文件并重命名
  1. 创建用户组、用户、文件夹、赋权
    groupadd mysql                  #创建用户组
useradd -r -g mysql mysql #创建用户 -r:建立系统账号 -g:指定用户组
cd /app/mysql #切换到安装目录
mkdir data #创建数据存放目录
mkdir mysql-log #创建日志存放目录
mkdir mysql-log/err-log
mkdir mysql-log/slow-log
mkdir mysql-log/bin-log #主机需要此目录
chown -R root:mysql . #将当前目录以及字母里,所有者改变为 mysql,所属组修改为 mysql
chown -R mysql:mysql data
chown -R mysql:mysql mysql-log
  1. 配置 /etc/my.cnf
    vi /etc/my.cnf
  • 主机配置文件:
[mysqld]
port = 3306 #端口
basedir = /app/mysql #mysql安装路径
datadir = /app/mysql/data/ #mysql数据存放路径 #日志设置
log-error = /app/mysql/mysql-log/err-log/db-err.log #错误日志路径
slow-query-log-file = /app/mysql/mysql-log/slow-log/db-slow.log #慢SQL日志路径
long-query-time = 3 #怎样才算是慢sql,单位是秒 #开启 binlog 同步
server_id = 0001 #一个集群内的 MySQL 服务器 ID,全局唯一
log-bin = /app/mysql/mysql-log/bin-log/db-binlog #开启 Binlog 并写明存放日志的位置
max-binlog-cache_size = 64M #binlog 最大能够使用cache的内存大小
max-binlog-size = 1G #binlog 日志每达到设定大小后,会使用新的 binlog 日志
expire_logs_days = 15 #只保留最近15天的日志
binlog-format = mixed #混合模式复制
innodb_flush_log_at_trx_commit = 2 #和 sync_binlog 控制MySQL磁盘写入策略以及数据安全性
sync-binlog = 500 #控制数据库的binlog刷到磁盘上去 #性能调优配置
innodb_buffer_pool_size = 24576M
max_connections = 5000
max_connect_errors = 6000
external-locking = FALSE
max_allowed_packet = 64M
join_buffer_size = 64M
sort_buffer_size = 2M
read_rnd_buffer_size = 16M #SQL模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  • 从机配置文件:
[mysqld]
basedir = /app/mysql
datadir = /app/mysql/data
port = 3306
server_id = 0002 #这里需要在集群中保持唯一 #日志设置
expire_logs_days = 15
long-query-time = 3
slow-query-log-file=/app/mysql/mysql-log/slow-log/db-slow.log
log-error=/app/mysql/mysql-log/err-log/db-err.log #主从设置
replicate-do-db=db_test #需要从主库同步的数据库1
replicate-do-db=db_dev #需要从主库同步的数据库2
read_only=1 #只读设置 #性能调优设置
innodb_buffer_pool_size = 24576M
max_connections = 5000
max_connect_errors = 6000
external-locking = FALSE
max_allowed_packet = 64M
join_buffer_size = 64M
sort_buffer_size = 2M
read_rnd_buffer_size = 16M #SQL模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  1. 设置链接和服务
    cp /app/mysql/support-files/mysql.server /etc/init.d/mysql  # 可以使用service mysql start
ln -s /app/mysql/bin/mysql /usr/bin #任何路径可以使用 mysql 命令

数据库初始化

  1. 初始化数据库
    cd /app/mysql/bin/
./mysqld --defaults-file=/etc/my.cnf --user=mysql --initialize #初始化
  1. 查看密码(初始化数据库之后会生成一个 root 账户的默认密码)
    cat /app/mysql/mysql-log/err-log/db-err.log



3. 启动 mysql

    service mysql start
  1. 登录并修改 root 密码
    mysql -u root -p
set password = password('root');
flush privileges; #如果需要 root 远程连接,执行以下语句
use mysql;
update user set host = '%' where user = 'root';
flush privileges;

创建用户并赋权

  • 主机
    #需要创建用于和从机“通信”的用户,具有同步权限,后续操作需要
grant replication slave on *.* to 'copy'@'%' identified by 'copy';
flush privileges; #主机可以创建一个用户用于访问和操作某些特定的库,不应该让应用直接使用 root 用户. 这里的 db_test 是创建的一个测试库
grant all privileges on db_test.* to "app_user"@'%' identified by "app_user";
flush privileges;
  • 从机
    #需要创建用于“只读”权限的用户
grant select on db_test.* to 'readonly'@'%' identified by "readonly";
flush privileges;

主从同步启动

  • 主机
    #获得 master 二进制日志文件名及位置
show master status

  • 从机
    stop slave;     #暂停
reset slave; #重置
change master to master_host="主机IP", master_user="copy",master_password="copy",master_log_file="db-binlog.000002",master_log_pos=2532; #设置和主机同步的用户信息,日志文件信息
start slave; #启动
show slave status \G #查看从机状态,主要是看 Slave_IO_Running Slave_SQL_Running 上是否都是 yes

验证

  1. 主机和从机都创建数据库 db_test
    create database db_test
  1. 主机数据库新增表和数据,验证从机是否同步成功

可能出现的问题

  1. 未开启防火墙端口,导致无法通过远程软件访问到数据库,navicat 提示 10038
    #开启防火墙 3306 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent # centos7
firewall-cmd --reload

最新文章

  1. 关于Kb/s,KB/s的一些知识
  2. Bias/variance tradeoff
  3. Fisher's exact test( 费希尔精确检验)
  4. Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据
  5. cf Round 594
  6. util包就是用来放一些公用方法和数据结构的
  7. React-Native安装使用
  8. JavaScript 重点笔记
  9. 关于TCP/IP,必知必会的十个经典问题[转]
  10. 【C++】GSL(GNU Scientific Library) 的安装及在 Visual Studio 2017 中的使用
  11. spring boot aop 自定义注解 实现 日志检验 权限过滤
  12. MySQL(四)
  13. 激活prompt
  14. js日常
  15. 使用Simple MvvmToolkit开发Android和iOS程序
  16. 严重: The web application [] registered the JDBC driver [com.microsoft.sqlserver.jdbc.SQLServerDriver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDB
  17. python面试题(二)
  18. vyos 基础配置
  19. Python 进行 SSH 操作,实现本地与服务器的链接,进行文件的上传和下载
  20. android 动画学习系列(一)

热门文章

  1. LRC 滚动器 + Vue.js
  2. 温故知新——C++--封装
  3. 51单片机I2C总线
  4. 【题解】CF1324F
  5. 基于Intel x86 Android的RAD游戏开发
  6. str常用操作方法
  7. Spring中的一些面试题
  8. 多测师讲解接口测试 _postman(上)_高级讲师肖sir
  9. day05 Pyhton学习
  10. 请求https接口时报错:Caused by SSLError(SSLError(1, u'[SSL: CERTIFICATE_VERIFY_FAILED] certificat,安装certifi