首页
首页
文章目录
  1. 简介
  2. 需要准备的包
  3. 卸载系统自带的 mariadb-lib
  4. 解压mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
  5. 按照顺序安装rpm包
  6. mysql 配置更改目录与配置不区分大小写
  7. 启动mysql服务并更改root账户,并授于相关权限
  8. 配置Mysql主从
    1. 相关信息
    2. 配置主服务器
      1. 创建mysql的复制账户,并赋权
      2. 修改my.cnf
      3. 检查mysql-bin是否启用
    3. 配置从服务器
      1. 创建mysql的复制账户,并赋权
      2. 修改my.cnf
    4. 配置从库与主库连接
    5. 查看从库状态,并启动
      1. 查询主从是否成功的方法
  9. 切换主从
    1. 关闭复制
    2. 重置清楚复制信息,以免重启恢复复制状态
    3. 去掉my.cnf中只读参数
    4. 重启mysql
  10. 正常运行的数据库新增从库
    1. 锁定主数据库
    2. 备份整个主数据库
    3. 从库恢复数据库(保持数据一致)
    4. 配置从库与主库复制参数
    5. 解锁主数据库
  11. my.cnf列出
    1. 主库
    2. 从库
    3. 各个参数讲解
  12. mysql性能优化(逐步添加)

Centos 7.* 离线安装mysql5.7并配置mysql主从

简介

现在尤其是政府单位是没有单独的外网的,在机器安装完成之后,就只能离线安装相关服务。今天这篇文章是主要记录Centos7.2下如何离线安装mysql5.7

需要准备的包

文件包 下载地址
mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar http://ftp.ntu.edu.tw/pub/MySQL/Downloads/MySQL-5.7/mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar
libaio-0.3.109-13.el7.x86_64.rpm http://mirror.centos.org/centos/7/os/x86_64/Packages/libaio-0.3.109-13.el7.x86_64.rpm

卸载系统自带的 mariadb-lib

1
2
# rpm -qa|grep mariadb
# rpm -e --nodeps $(rpm -qa|grep mariadb)

查询mariadb
卸载mariadb

解压mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@mysql01 ~]# tar -xvf mysql-5.7.21-1.el7.x86_64.rpm-bundle.tar 
mysql-community-embedded-devel-5.7.21-1.el7.x86_64.rpm
mysql-community-minimal-debuginfo-5.7.21-1.el7.x86_64.rpm
mysql-community-common-5.7.21-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.21-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.21-1.el7.x86_64.rpm
mysql-community-server-minimal-5.7.21-1.el7.x86_64.rpm
mysql-community-client-5.7.21-1.el7.x86_64.rpm
mysql-community-server-5.7.21-1.el7.x86_64.rpm
mysql-community-embedded-5.7.21-1.el7.x86_64.rpm
mysql-community-test-5.7.21-1.el7.x86_64.rpm
mysql-community-devel-5.7.21-1.el7.x86_64.rpm
mysql-community-libs-5.7.21-1.el7.x86_64.rpm

解压mysql.tar包

按照顺序安装rpm包

1
2
3
4
5
6
7
8
9
# rpm -ivh mysql-community-common-5.7.21-1.el7.x86_64.rpm 

# rpm -ivh mysql-community-libs-5.7.21-1.el7.x86_64.rpm

# rpm -ivh mysql-community-client-5.7.21-1.el7.x86_64.rpm

# rpm -ivh libaio-0.3.109-13.el7.x86_64.rpm # 安装mysql-community-server时 需要先安装libaio

# rpm -ivh mysql-community-server-5.7.21-1.el7.x86_64.rpm

mysql 配置更改目录与配置不区分大小写

1、修改my.cnf配置文件

1
2
3
4
5
6
datadir=/data/mysql_data
socket=/data/mysql_data/mysql.sock
symbolic-links=0
lower_case_table_names=1
log-error=/data/mysql_log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

lower_case_table_names=1 使mysql在linux下不区分大小写
2、配置软连接

1
ln -s /data/mysql_data/mysql.sock /var/lib/mysql/mysql.sock

3、在data下创建相关目录并授权

1
2
3
4
# mkdir /data/mysql_data
# mkdir /data/mysql_log
# chown -R mysql:mysql mysql_data
# chown -R mysql:mysql mysql_log

启动mysql服务并更改root账户,并授于相关权限

1、关闭selinux

1
# setenforce 0 临时关闭

永久关闭

1
2
vim /etc/sysconfig/selinux
将 SELINUX=enforcing ----> SELINUX=disabled

2、启动mysql

1
systemctl start mysqld

3、从日志目录/data/mysql_logs/mysqld.log中找到root密码

查看mysql密码

4、登录mysql的root账户并更改系统生成的密码

1
2
# mysql -uroot -p
mysql> SET PASSWORD = PASSWORD('password');

5、配置root账户允许本机和10网段的ip地址访问

1
2
3
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhsot' IDENTIFIED BY 'password';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.%.%.%' IDENTIFIED BY 'password';
mysql> FLUSH PRIVILEGES;

配置Mysql主从

相关信息

主机名 主从 描述 ip地址 log_bin
mysql01 Master 主服务器 10.12.118.5 101
mysql02 Slave 从服务器 10.12.118.6 102

配置主服务器

创建mysql的复制账户,并赋权
1
2
3
4
# mysql -u root -p
Enter password: ****
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'10.%.%.%' IDENTIFIED BY 'Copy_password_11';
mysql> FLUSH PRIVILEGES;
修改my.cnf

在/etc/my.cnf中添加

1
2
server_id=101
log_bin=/data/mysql_log/mysql-bin

重启msyql服务

检查mysql-bin是否启用

检查有俩种方法
1、检查/data/mysql_log 目录中是否存在mysql-bin.00001

检查mysql-bin

2、通过查询数据库查看

1
2
3
# mysql -u root -p
Enter password: ****
mysql> SHOW MASTER STATUS;

检查mysql-bin

说明:000001 说明是第一次,如果 MySQL 重启服务,这个值会递增为 mysql-bin.000002

配置从服务器

创建mysql的复制账户,并赋权
1
2
3
4
# mysql -u root -p
Enter password: ****
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'10.%.%.%' IDENTIFIED BY 'Copy_password_11';
mysql> FLUSH PRIVILEGES;
修改my.cnf

在/etc/my.cnf中添加

1
2
3
server_id=101
log_bin=/data/mysql_log/mysql-bin
read_only=1 # 从库使用 read_only=1,这样会将从库设为只读的,如果有其他需求(如在从库上需要建表),请去掉这个配置后重启即可。

重启msyql服务

配置从库与主库连接

1
mysql> CHANGE MASTER TO MASTER_HOST='10.12.118.5',MASTER_USER='repl',MASTER_PASSWORD='Copy_password_11',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=0;

执行连接Master

查看从库状态,并启动

1
msyql> SHOW SLAVE STATUS\G

说明:Slave_IO_State, Slave_IO_Running: No, Slave_SQL_Running: No 表明当前从库的复制服务还没有启动。
查看slave是否启动

启动从库

1
mysql> START SLAVE;

查看slave是否启动

查询主从是否成功的方法
  • 第一种:
    1
    SHOW SLAVE STATUS\G

检查Slave_IO_State, Slave_IO_Running: No, Slave_SQL_Running: No 状态

其中 No 为未同步 Yes为正常

  • 第二种:
    1
    SHOW SLAVE HOSTS;

State状态为: Master has sent all binlog to slave; waiting for more updates表示正常
查看slave是否同步1

  • 第三种:
    1
    SHOW PROCESSLIST \G;

可以看到相关信息即可
查看slave是否同步2

切换主从

如果遇到突发情况(master死机蓝屏,被人rm -rf / 等),需要将从库改为主库。

流程: 关闭复制—>重置清楚复制信息,以免重启恢复复制状态—>去掉my.cnf中只读参数—> 重启

关闭复制

1
mysql> STOP SLAVE;

重置清楚复制信息,以免重启恢复复制状态

1
mysql> RESET SLAVE ALL;

去掉my.cnf中只读参数

1
2
3
4
5
6
[root@mysql02 mysql_log]# cat /etc/my.cnf
...
...
# read_only=1
...
...

重启mysql

1
# systemctl restart mysqld

正常运行的数据库新增从库

流程:锁定主数据库—-> 备份整个主数据库—-> 从库恢复数据库(保持数据一致) —-> 配置从库与主库复制参数 —-> 解锁主数据库

锁定主数据库

1
mysql> flush tables with read lock;

备份整个主数据库

1
# mysqldump db1 > db1.sql

从库恢复数据库(保持数据一致)

1
mysql> source db1.sql;

配置从库与主库复制参数

1
mysql> CHANGE MASTER TO MASTER_HOST='10.12.118.5',MASTER_USER='repl',MASTER_PASSWORD='Copy_password_11',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

此处注意154为Binlog的偏移量,该参数来自于“mysql> SHOW MASTER STATUS;”
获取Pos

解锁主数据库

1
mysql> unlock tables;

my.cnf列出

主库

1
2
3
4
5
6
7
8
9
10
[mysqld]
datadir=/data/mysql_data
socket=/data/mysql_data/mysql.sock
symbolic-links=0
lower_case_table_names=1
log-error=/data/mysql_log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server_id=101
log_bin=/data/mysql_log/mysql-bin
expire_logs_days=30

从库

1
2
3
4
5
6
7
8
9
10
11
[mysqld]
datadir=/data/mysql_data
socket=/data/mysql_data/mysql.sock
symbolic-links=0
lower_case_table_names=1
log-error=/data/mysql_log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
server_id=102
log_bin=/data/mysql_log/mysql-bin
read_only=1
expire_logs_days=30

各个参数讲解

选项 描述
datadir 数据库db存放路径
socket 系统socket文件需要通过ln -s /data/mysql_data/mysql.sock /var/lib/mysql/mysql.sock来链接到指定位置
symbolic-links 支持符号链接0表示不支持1表示支持
lower_case_table_names 是否忽略大小写0不忽略1忽略
log-error 日志路径
pid-file pid文件路径
server_id 主从中唯一id
log_bin Binlog 保存路径与名称前缀
read_only 是否只读
expire_logs_days 二进制日志存放天数 1-99 默认不清除

mysql性能优化(逐步添加)

一些对mysql性能有利的参数

1
2
3
4
5
6
[mysqld]
# other variables here
innodb_buffer_pool_size = 1G # (adjust value here, 50%-70% of total RAM)
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1 # may change to 2 or 0
innodb_flush_method = O_DIRECT
mysql参数 描述
innodb_buffer_pool_size 设置为 RAM 大小的 50%-70%,不需要大于数据库的大小
innodb_flush_log_at_trx_commit 1(默认值),0/2 (性能更好,但稳定性更差)
innodb_log_file_size 128M – 2G (不需要大于 buffer pool)
innodb_flush_method O_DIRECT (避免双缓冲技术)

以上

End

支持一下
扫一扫,我会更有动力更新
  • 微信扫一扫
  • 支付宝扫一扫