utunbu18 server实现mysql5.7主从复制

本文详细介绍了如何在Ubuntu 18.04上配置MySQL 5.7的主从复制,包括主库和从库的配置步骤,如启用二进制日志、添加备份用户、调整配置文件,以及解决在配置过程中可能出现的错误和问题。
摘要由CSDN通过智能技术生成

一、资源:
1、两个mysql环境:版本一直,都是用3306端口;
二、配置:
1、配置mysql主库:
(1)修改mysql配置文件:/etc/mysql/mysql.conf.d/mysqld.conf
添加如下字段:
#[必须]启用二进制日志 (启动主库二进制日志,是必须)
log-bin=mysql-bin

	#[必须]服务器唯一ID,默认是1
	server-id=1

重启mysql :sudo /etc/init.d/mysql restart;
查询当前mysql中的master服务区状态:mysql>show master status\G;
如果没有配置上方配置,会出现报错;
如果配置成功出现
其中的file以及position是后期用到的

     其中的file以及position字段后期需要用到;

(2)给主服务区添加拥有备份权限的用户:
mysql -uroot -p123456 -e “GRANT REPLICATION SLAVE,RELOAD,SUPER ON . TO ‘backup’@‘192.168.1.%’ IDENTIFIED BY ‘Attack@123’;”
并刷新权限:flush privileges;
2、配置mysql从库:
(1)修改mysql配置文件:/etc/mysql/mysql.conf.d/mysqld.conf
#[如果后期需要用从库实现新的从库,可以开启二进制日志)
log-bin=mysql-bin

	       #[必须]服务器唯一ID;
	       server-id=2

注意:由于此时的mysql从库已经启动过,会自动保留一个uuid的服务编号,这个编号文件(auto.cnf)如果不删除,无法实现主从;
删除文件,运行: sudo find / -name ‘auto.cnf’
sudo rm -rf ‘auto.cnf’
3、配置主从关系:
(1)连接进入数据库mysql -uroot -p123456;
首先关闭slave:stopslave;
(2)启动服务器复制功能:
//注意master_log_pos值经常会变化,记得执行如下命令前先执行主库中的"show master status;",得到最新的Position列,154数字前后无单引号。
命令为:change master to master_host=‘主库ip’,master_user=‘备份用户名’,master_password=‘用户密码’,master_log_file=‘主库master中的file’,master_log_pos=‘主库master中的position’;start slave;
(3)查询当前slave状态:mysql>show slave status\G;
在这里插入图片描述

主要查看以下两项:
Slave_IO_Running: Yes
lave_SQL_Running: Yes
整个过程结束;

问题描述:

  1. ERROR 1862 (HY000): Your password has expired. To log in you must change it using a client that supports expired passwords.

遇到这个问题,可能是因为客户端mysql和服务端版本不一致,比如mysql-5.5.41连接5.7.12。

  1. TIMESTAMP with implicit DEFAULT value is deprecated

执行MySQL的“bin/mysqld --initialize --user=mysql”时报的错误。

原因是从MySQL 5.6版本开始,timestamp的默认值已被标为deprecated,即如果类型为timestamp的字段,如果没有明确声明默认值为NULL,则默认为NOT NULL。如果设置timestamp字段为NULL,则自动存储当前的timestamp。

  1. Can’t find error-message file ‘/usr/local/mysql/share/errmsg.sys’

执行MySQL的“bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp”时报的错误。

这可能是因为之前有执行过,导致data目录不为空,通过“bin/mysqld --verbose --help|grep datadir”可以查看到默认的数据目录为/var/lib/mysql/。需要保证/var/lib/mysql/目录为空。或者通过指定参数–datadir改变数据目录,如“bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp --datadir=/data/mysql/data”。

  1. Can’t find error-message file ‘/usr/local/mysql/share/errmsg.sys’

对于错误:

Can’t find error-message file ‘/usr/local/mysql/share/errmsg.sys’. Check error-message file location and ‘lc-messages-dir’ configuration directive.

从官网下载的MySQL默认安装目录为/usr/local/mysql,如果实际为其它目录,则建议通过参数–basedir指定,否则会遇到不少安装问题。通过执行“bin/mysqld --verbose --help|grep basedir”即可看到“–basedir”的默认值为/usr/local/mysql/。

  1. Can’t connect to local MySQL server through socket

使用mysql试图进入MySQL Cli时,遇到错误:

ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)

可能是因为客户端的版本和服务端的版本不一致,如果是这样,通常不存在/var/lib/mysql/mysql.sock。可以修改环境变量PATH来解决,让新安装的MySQL的bin目录位于PATH前头,如:

export MYSQL_HOME=/usr/local/mysql

export PATH= M Y S Q L H O M E / b i n : MYSQL_HOME/bin: MYSQLHOME/bin:PATH

export MANPATH= M Y S Q L H O M E / m a n : MYSQL_HOME/man: MYSQLHOME/man:MANPATH

  1. ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread;run STOP SLAVE IO_THREAD FOR CHANNEL ‘’ first.

在设置同步关系时,没有先停止slaves线程。解决办法为在设置同步关系之前,先执行下“stop slave”,以停止slave线程。

  1. ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

执行mysql时报的错,是由于服务端mysqld和客户端mysql两者的mysql.sock文件位置不同。

解决办法:

使用“ps aux|grep mysqld”或“cat “/proc/pidof mysqld/cmdline””查看mysqld参数“–socket”的值,比如可能是“/var/lib/mysql/mysql.sock”。

显然不是mysql要找的“/tmp/mysql.sock”,指定下mysql的参数“-S”即可解决问题,如:mysql -S/var/lib/mysql/mysql.sock -uroot -p(坑爹的MySQL-5.7.12,默认参数各种不一致)。

  1. mysqld: Table ‘mysql.plugin’ doesn’t exist

2016-05-18T03:33:56.235882Z 0 [ERROR] Can’t open the mysql.plugin table. Please run mysql_upgrade to create it.

可以使用“bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp”重做下初始化,即可解决。

  1. 2016-05-18T03:41:02.970764Z 0 [ERROR] Fatal error: Can’t open and lock privilege tables: Table ‘mysql.user’ doesn’t exist

办法同上。

  1. 2016-05-18T03:44:42.731483Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.

执行“bin/mysqld --initialize --user=mysql --explicit_defaults_for_timestamp”时报的错误,解决办法是清空data目录后再执行。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值