mysql搭建主从结构

1.安装 mysql服务

1.卸载系统自带的相关数据库

rpm -qa | grep mysql
rpm -qa | grep mariadb

rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64

2.部署Mysql

tar -zxvf mysql-5.7.25-el7-x86_64.tar.gz -C /opt/module/

3.账号与权限

#添加账号
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql

#创建data目录
mkdir /data2/mysql/data

#修改权限
chown -R mysql:mysql /data2/mysql/data

4.初始化Mysql,获取root@localhost的初始密码

cd  /opt/module/mysql-5.7.25-el7-x86_64
./bin/mysqld --initialize --user=mysql --basedir=/opt/module/mysql-5.7.25-el7-x86_64 --datadir=/data2/mysql/data
#查看初始密码
cat /var/log/mysqld/mysqld.log | grep 'temporary password'

5.配置环境变量

vim /etc/profile
#Mysql
export MYSQL_HOME=/opt/module/mysql-5.7.25-el7-x86_64
export PATH=$PATH:$MYSQL_HOME/bin

6.设置文件路径:log && pid && socket

# 日志路径
mkdir -p /var/log/mysqld
touch /var/log/mysqld/mysqld.log
chown -R mysql:mysql /var/log/mysqld/

# pid路径
mkdir -p /var/run/mysqld
chown -R mysql:mysql /var/run/mysqld/

# socker路径
mkdir -p /var/lib/mysqld
chown -R mysql:mysql /var/lib/mysqld/
ln -s /var/lib/mysqld/mysql.sock /tmp/mysql.sock

7.设置开机启动

#复制开机启动脚本到系统服务
cp /opt/module/mysql-5.7.25-el7-x86_64/support-files/mysql.server /etc/rc.d/init.d/mysqld
chown mysql:mysql /etc/rc.d/init.d/mysqld

# 修改默认的"basedir"与"datadir"
vim /etc/rc.d/init.d/mysqld
basedir=/opt/module/mysql-5.7.25-el7-x86_64
datadir=datadir=/data2/mysql/data

#添加开机启动脚本
chkconfig --add mysqld

#3:带网络的多用户,也就是所谓的纯字符模式
#5:图形界面的多用户模式
chkconfig --level 35 mysqld on

2.配置 mysql

mkdir -p /opt/module/mysql-5.7.25-el7-x86_64/etc
vim  /opt/module/mysql-5.7.25-el7-x86_64/etc/my.cnf

1.配置 master

[mysqld]
server-id=2

# 启用二进制日志,存放在datadir下
log-bin=/data2/mysql/data/master-bin
log_bin_index = master-bin.index

# STATEMENT模式(SBR)每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)
# ROW模式(RBR)不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。
# MIXED模式(MBR),以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。
binlog_format=mixed   #设置binlog模式,混合模式
expire_logs_days = 7  #保留7天的binlog

character-set-server=utf8
max_connections = 3000
log-error=/var/log/mysqld/mysqld.log
#记录当前MySQL进程的process id目录,启动MySQL时会去检查pid,如果存在且占用状态则会启动报错,如果存在并不占用会删除该pid,没有pid后启动MySQL会新建一个pid记录MySQL进程,主要是为了防止同一个数据库被启动多次
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/lib/mysqld/mysql.sock
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
basedir = /opt/module/mysql-5.7.25-el7-x86_64
datadir = /data2/mysql/data

[mysql]
default-character-set=utf8

2.配置 slave

[mysqld]
server-id=137

read_only = 1

#将master的连接信息写入表:mysql.salve_master_info
master_info_repository=TABLE

#将中继日志的信息写入表:mysql.slave_realy_log_info
relay_log_info_repository=TABLE

#中继日志自我修复;当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性
relay_log_recovery = on

#relay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件
relay-log = /data2/mysql/data/slave-relay-bin

#主服务器I/O日志读取、记录及存放
relay-log-index = slave-relay-bin.index

character-set-server=utf8
max_connections = 3000
log-error=/var/log/mysqld/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
socket=/var/lib/mysqld/mysql.sock
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
basedir = /opt/module/mysql-5.7.25-el7-x86_64
datadir = /data2/mysql/data

[mysql]
default-character-set=utf8

3.启动 master,slave,并登陆mysql

service mysqld start

4.master创建复制用户

grant replication slave on *.* to 'slave'@'192.168.2.x' identified by '123456';

#查看当前数据库的二进制日志写到什么位置(只有打开二进制日志,这句命令才有结果)
show master status;

5.从服务器配置同步信息

change master to master_host='192.168.2.x',master_user='slave',master_password='xxxx',master_port=3306,master_log_file='master-bin.000002',master_log_pos=846;

6.从服务器启动复制线程

start slave;
show slave statusG

Slave_IO_Running: Yes 表示成功连接到master并且下载日志
Slave_SQL_Running: Yes 表示成功执行日志中的SQL语句

原文地址:https://www.cnblogs.com/wuning/p/11913179.html