01 前言
mysql是关系型数据库管理系统的一种,具有体积小、开源、社区支持好等特性。相对oracle、db2等来说非常适合初创公司使用。
本文转自我个人的公众号:天目星 ,请大家多多关注。
一、使用的软件与架构图
linux:CentOS 7.5.1804
mysql:mysql-5.7.25-linux-glibc2.12
二、安装软件
依赖库1:MySQL依赖于libaio 库。未安装此库,则数据目录初始化和后续服务器启动步骤将失败。
依赖库2:如需对非统一内存访问(NUMA)的支持,需要安装libnuma库。
yum install libaio numactl
解压至:
tar xvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
ln -sv /usr/local/mysql-5.7.25-linux-glibc2.12-x86_64 /usr/local/mysql
安装:
# 新建mysql账号
useradd -r -u 306 -s /sbin/nologin mysql
# 新建mysql的数据存放目录,并给予权限
mkdir -pv /mydata/mysql/{data,logbin}
chown -R mysql.mysql /mydata/mysql
chmod -R 750 /mydata/mysql
# 初始化mysql
/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/mydata/mysql/data
# 如需要配置SSL安全连接,可以使用以下命令,mysql5.7新功能
/usr/local/mysql/bin/mysql_ssl_rsa_setup --datadir=/mydata/mysql/data
PS:centos如自带有/etc/my.cnf与/etc/my.cnf.d/mysql-clients.cnf文件需要删除,另外初始化的目录必须为空。
启动mysql:
vim /usr/lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
[Service]
User=mysql
Group=mysql
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecReload=/usr/local/mysql/support-files/mysql.server restart
ExecStop=/usr/local/mysql/support-files/mysql.server stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
测试启动ok
systemctl start mysql.service
systemctl status mysql.service
##############################################
● mysqld.service - mysqld
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2019-04-28 15:10:54 CST; 1min 59s ago
Process: 5717 ExecStart=/usr/local/mysql/support-files/mysql.server start (code=exited, status=0/SUCCESS)
Main PID: 5730 (mysqld_safe)
CGroup: /system.slice/mysqld.service
├─5730 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/mydata/...
└─5913 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --da...
三、配置主从模式
两台服务器按照以上的方法准备好后,我们开始编写配置文件。
主配置
[client]
socket=/mydata/mysql/tmp/mysql.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
########### base #####################
user=mysql
port=3306
basedir=/usr/local/mysql
datadir=/mydata/mysql/data
socket=/mydata/mysql/tmp/mysql.sock
log-error=/mydata/mysql/log/mysqld.log
pid-file=/mydata/mysql/mysqld.pid
############ extend #######################
log-bin=/mydata/mysql/binlog/mysql-bin #开启logbin
binlog_format=row #binlog按行记录
innodb_file_per_table=1 #设置独立表空间
sync-binlog=1 #强制每条命令写入硬盘,设置>1性能会更好,但是不安全
innodb_flush_log_at_trx_commit=1 #事务缓存强制写入硬盘
server-id=1 #配置server id,唯一值
gtid_mode=ON #开启gtid功能
enforce-gtid-consistency=true #启用变量以确保仅记录对基于GTID的复制安全的语句
relay_log_recovery = 1
skip_slave_start = 1
从配置
[client]
socket=/mydata/mysql/tmp/mysql.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
########### base #####################
user=mysql
port=3306
basedir=/usr/local/mysql
datadir=/mydata/mysql/data
socket=/mydata/mysql/tmp/mysql.sock
log-error=/mydata/mysql/log/mysqld.log
pid-file=/mydata/mysql/mysqld.pid
############ extend #######################
log-bin=/mydata/mysql/binlog/mysql-bin #开启logbin
binlog_format=row #binlog按行记录
innodb_file_per_table=1 #设置独立表空间
sync-binlog=1 #强制每条命令写入硬盘,设置>1性能会更好,但是不安全
innodb_flush_log_at_trx_commit=1 #事务缓存强制写入硬盘
server-id=2 #配置server id,唯一值
gtid_mode=ON #开启gtid功能
enforce-gtid-consistency=true #启用变量以确保仅记录对基于GTID的复制安全的语句
relay_log_recovery = 1
skip_slave_start = 1 # 设置此项后重启服务默认不启动slave复制
在主服务器中配置复制账号
ps:当然,使用root账号也可以复制,但是不安全。
# 登录mysql
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'yourpassword';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
在从服务器配置复制源
# 登录mysql
mysql> CHANGE MASTER TO
-> MASTER_HOST='MASTER_IP',
-> MASTER_PORT=3306,
-> MASTER_USER='repl',
-> MASTER_PASSWORD='yourpassword',
-> MASTER_AUTO_POSITION=1;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS \G
显示以下结果
Slave_IO_State: Waiting for master to send event
...省略...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...省略...
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
完毕