mysql主从配置
mysql主从配置
-
主从介绍
-
MySQL复制允许将主实例(master)上的数据同步到一个或多个从实例(slave)上,默认情况下复制是异步进行的,从库也不需要一直连接主库来同步数据。
-
MySQL复制的数据粒度可以是主实例上所有的数据库,也可以是指定的一个或多个数据库,也可以是一个数据库里的指定的表。
-
MySQL复制带来的优势在于:
-
扩展能力:
通过复制可以将MySQL的性分到一个或多个slave上。这要求所有的写操作和修改操作都必须在Master上完成,而读操作可以被分配到一个或多个salve上。将读写分离到不同服务执行之后,MySQL的读写性能得到提升。
-
数据库备份:
由于从实例时同步主实例的数据,所以可以将备份作业部署到从库。
-
数据分析和报表:
同样,一些数据分析和报表的实现可以在从实例执行,以减少对主库的性能影响。
-
容灾能力:
可以在物理距离较远的另一个数据建立slave,保证在主实例所在地区遭遇灾难时,在另一个数据中心能快速恢复。
-
说明
两台mysql服务器,一台作为主服务器,一台作为从服务器,主服务器进行写操作、从服务器进行读操作
主服务器数据库:192.168.64.135
从服务器数据库:192.168.3.134
2、软件安装
-
使用ubuntu apt安装mysql,默认安装APT软件包存储库中的mysql
$ sudo apt install -y mysql-server mysql-client libmysqlclient-dev
-
如果想安装最新版mysql,需要按照如下操作:
安装mysql 8.0
3、配置主服务器数据库
-
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到如下内容并对应修改
#服务器唯一标识
server-id = 1
#启动MySQL二进制日志
log_bin = /var/log/mysql/mysql-bin.log
#指定需要同步的数据库,自定义,如需指定多个,再添加一行
binlog_do_db = ops
binlog_do_db = el_hub
#指定不需要同步的数据库
binlog_ignore_db = mysql
bind-address = 0.0.0.0
-
重启mysql服务
$ sudo systemctl restart mysql
-
使用apt安装mysql无法设置密码,需要查看初始密码执行以下语句:
sudo cat /etc/mysql/debian.cnf
-
创建ops和hub的数据库(两台服务器上都要操作)
sudo mysql -uroot -p
填入初始密码:41McNSXsfgLBVwfj
create database ops charset utf8;
create database el_hub charset utf8;
-
登录主服务器数据库创建从服务器用到的账户和权限
$ sudo mysql -uroot -p
填入初始密码:41McNSXsfgLBVwfj
mysql> create user 'hongpu'@'%' identified by 'hongpu8192';
Query OK, 0 rows affected (0.03 sec)
mysql> grant all on *.* to 'hongpu'@'%';
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql>show master status;
4、配置从服务器数据库
-
$ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
找到如下内容并修改:
server-id = 2 #必须与主服务器数据库不一样
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = marhal
binlog_ignore_db = mysql
-
重启mysql服务
$sudo systemctl restart mysql
-
使用apt安装mysql无法设置密码,需要查看初始密码执行以下语句:
sudo cat /etc/mysql/debian.cnf
-
登录从服务器数据库配置
$ mysql -u root -p
初始密码:7cogZ3zHNZkHB3wT
mysql> change master to \
master_host='192.168.64.135', \
master_port=3306, \
master_user='hongpu', \
master_password='hongpu8192', \
master_log_file='mysql-bin.000003', \
master_log_pos=154;
master_log_file='mysql-bin.000001', //上面截图的File字段值
master_log_pos=1095; //上面截图的Position字段值
>start slave;
#查看slave信息
>show slave status\G;
至此,已配置成功
5、常见情况处理
问题:记录删除失败
解决方法:master要删除一条记录,而slave上因找不到要删除的记录而报错,这种情况说明从机都已经删除过了,那么从机可以直接跳过
stop slave;
set global sql_slave_skip_counter=1;
start slave;