MySQL 5.7主从搭建(同一台机器)

主从复制原理:复制是 MySQL 的一项功能,允许服务器将更改从一个实例复制到另一个实例。
1)主服务器将所有数据和结构更改记录到二进制日志中。
2)从属服务器从主服务器请求该二进制日志并在本地应用其内容。
3)IO:请求主库,获取上一次执行过的新的事件,并存放到relaylog
4)SQL:从relaylog中将sql语句翻译给从库执行
本次搭建在同一台机器上搭建,用不同用户和不同端口以及不同程序路径。安装过程比较简单,采用二进制的方式来做的。

主库搭建:

加入环境变量:

export  MYSQL_HOME=/opt/mysql
export  PATH=$PATH:$MYSQL_HOME/bin
主库的配置文件:
[mysql]
no-auto-rehash
port    = 3306
socket  = /opt/data/mysqld.sock
[mysqld]
user    = mysql
port    = 3306
basedir = /opt/mysql
datadir = /opt/data
socket  = /opt/data/mysqld.sock
pid-file = mysql.pid
character-set-server = utf8
skip_name_resolve = 1
lower_case_table_names=1
max_connections = 1000
max_connect_errors = 1000000
table_open_cache = 4000
table_definition_cache = 4000
table_open_cache_instances = 64
max_allowed_packet = 32M
sort_buffer_size = 16M
join_buffer_size = 16M
thread_cache_size = 450
query_cache_size = 0
query_cache_type = 0
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 96M
max_heap_table_size = 96M
general_log=1
general_log_file=general.log
slow_query_log = 1
slow_query_log_file = /opt/log/slow.log
log_error = /opt/log/error.log
long_query_time =1
server-id = 170
log_bin = mysql-bin
log_slave_updates=on
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
expire_logs_days = 7
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_format = row
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 16M
lock_wait_timeout = 3600
innodb_thread_concurrency = 0
transaction_isolation = REPEATABLE-READ
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 8
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 3

当时启动主库的时候会有个错误:

查看error.log后:

原因是配置参数的问题,自动扩展配置参数设置的太大导致。

主库初始化:mysqld --initialize --user=mysql --datadir=/opt/data --basedir=/opt/mysql --socket=/opt/data/mysqld.sock

bin/mysql_install_db --user=mysql  --basedir=/usr/local/mysql  --datadir=/mydata/data        # Before MySQL 5.6

 bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql  --datadir=/mydata/data      # MySQL 5.7 and up

update mysql.user set authentication_string=password('L*Rb0!gtigergao!@#') where user='root' and Host = 'localhost'


初始化主库后启动mysql服务进行登录,必须要先修改密码:
ALTER USER "root"@"localhost" IDENTIFIED BY "shsnc!@#";
flush privileges;

登录主库创建主从同步用户:
create user 'tigergao' identified by 'tigergao';

赋权:grant replication slave on *.* to tigergao@'10.131.156.%' identified by 'tigergao';

记录binlog位置:

主库配置完毕,需要进行配置从库。
注意:由于我是在同一台机子上做的主从,主库采用的做了软链后用service mysql start的方式启动的,由于担心同时做软链会发生冲突,所以从库用命令的方式启动的。

 

从库配置:

 加入环境变量

export  MYSQL_HOME=/data/mysql
export  PATH=$PATH:$MYSQL_HOME/bin

从库的配置:
[mysql]
no-auto-rehash
port    = 3309
socket  = /data/data/mysqldbs.sock
[mysqld]
user    = mysql01
port    = 3309
basedir = /data/mysql
datadir = /data/data
socket  = /data/data/mysqldbs.sock
pid-file = mysqldbs.pid
character-set-server = utf8
skip_name_resolve = 1
lower_case_table_names=1
max_connections = 1000
max_connect_errors = 1000000
table_open_cache = 4000
table_definition_cache = 4000
table_open_cache_instances = 64
max_allowed_packet = 32M
sort_buffer_size = 16M
join_buffer_size = 16M
thread_cache_size = 450
query_cache_size = 0
query_cache_type = 0
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 96M
max_heap_table_size = 96M
general_log=1
general_log_file=general.log
slow_query_log = 1
slow_query_log_file = /data/log/slow.log
log_error = /data/log/error.log
long_query_time =1
server-id = 175
relay-log-index=slave-relay-bin.index
relay-log=slave-relay-bin
log_slave_updates=on
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 2G
max_binlog_size = 1G
expire_logs_days = 7
master_info_repository = TABLE
relay_log_info_repository = TABLE
binlog_format = row
key_buffer_size = 32M
read_buffer_size = 8M
read_rnd_buffer_size = 16M
lock_wait_timeout = 3600
innodb_thread_concurrency = 0
transaction_isolation = REPEATABLE-READ
innodb_buffer_pool_size = 2G
innodb_buffer_pool_instances = 8
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 2G
innodb_log_files_in_group = 3

从库采用命令启动指定配置文件:
/usr/local/mysql/bin/mysqld_safe --defaults-extra-file=/etc/my3306.cnf --datadir=/mysql3306 --user=mysql &
从库初始化:
mysqld --initialize --user=mysql01 --datadir=/data/data --basedir=/data/mysql --socket=/data/data/mysqldbs.sock
从库启动:指定配置文件的方式启动
/data/mysql/bin/mysqld_safe --defaults-extra-file=/data/mysql/conf/my.cnf --datadir=/data/data --basedir=/data/mysql --user=mysql01 &

ps -ef | grep -i mysql |grep -v grep 查看进程,3306和3309都已经起来了。

 

设置主从:

 

设置主从:需要在从库上执行
change master to master_host='主库ip';
change master to master_port=3306;
change master to msater_user='tigergao';
change master to master_password='tigergao';
change master to master_log_file='mysql-bin.000001';
change master to master_log_pos=1097;
开启主从:startslave

 

 

 

在从库上查看sql线程和io线程是否成功应用,如果已应用代表就是成功了。show slave status \G;

验证主从,在主库上创建数据库:tigergao;在数据库tigergao中创建一张学生表并插入数据。

然后在从库上查看:

可以看到从库已经把数据库和表以及数据都同步过来了。分别去查看主库和从库的数据目录下的数据。
主从已经搭建成功。
主从复制基本故障处理
IO线程
++ 连接主库 ++
1)user password ip port
2)网络:不通,延时高,防火墙
++ 请求binlog ++
1)binlog不存在或者损坏
++ 更新relay-log和master.info ++
SQL线程
1)relay-log出现问题
2)从库做写入了
操作对象已存在(create)
操作对象不存在(insert update delete drop truncate alter)
约束问题、数据类型、列属性
处理方法一:
#临时停止同步
mysql> stop slave;
#将同步指针向下移动一个(可重复操作)
mysql> set global sql_slave_skip_counter=1;
#开启同步
mysql> start slave;
处理方法二:
#编辑配置文件
vim /etc/my.cnf
#在[mysqld]标签下添加以下参数
slave-skip-errors=1032,1062,1007
但是以上操作都是有风险存在的
处理方法三:
1)重新备份数据库,恢复到从库
2)给从库设置为只读
#在命令行临时设置
mysql> set global read_only=1;
#在配置文件中永久生效/etc/my.cnf
read_only=1
6.延时从库
企业中一般会延时3-6小时
延时从库配置方法
从库操作
#停止主从
mysql>stop slave;
#设置延时为180秒
mysql>change master to master_delay = 180;
#开启主从
mysql>start slave;
#查看状态
mysql> show slave status \G
SQL_Delay: 60
3.延时从库停止方法
#停止主从
mysql> stop slave;
#设置延时为0
mysql> CHANGE MASTER TO MASTER_DELAY = 0;
#开启主从
mysql> start slave;
关闭半同步:
主库执行
SET GLOBAL rpl_semi_sync_master_enabled = 0;
SET GLOBAL rpl_semi_sync_master_wait_no_slave = 0;

从库执行:
SET GLOBAL rpl_semi_sync_slave_enabled = 0;

 

 

 建议大家有资源的话尽量在两台机器上实验,一台机器上容易有坑。

 

转载于:https://www.cnblogs.com/tigergaonotes/p/11093811.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值