Mysql-生产环境用到的技术.md

现在是 03-28 早上四点,刚刚结束了一波线上环境的数据库迁移,趁着热乎,把用到的技术做一个总结

设置 Mysql 数据目录

前言:
由于之前服务都是采用 AWS 的 RDS 服务,RDS 好是好,但是服务的成本过于的高,大概 1c1g 的机器一个月需要 500~1000 人民币,公司为了削减成本所以将 RDS 数据迁移到本地服务器。但是由于存储的数据有30多G,机器的 /root 目录不足以存储这么大的数据,所以需要进行 mysql 的 data 数据目录更改。

条件:
服务器:ubuntu 16.04
mysql:5.7.1

迁移步骤:
1、查看 data 目录

mysql> select @@datadir;

返回值:

Output
+-----------------+
| @@datadir       |
+-----------------+
| /var/lib/mysql/ |
+-----------------+
1 row in set (0.00 sec)

2、迁移现有数据

停掉当前 mysql 服务

service mysql stop

复制 mysql data 数据(实例中,将数据复制到 /root/.mysql 目录下)

rsync -av /var/lib/mysql /root/.mysql

备份原有数据

mv /var/lib/mysql /var/lib/mysql.bak

3、修改 mysql 配置

vim /etc/mysql/mysql.conf.d/mysqld.cnf

datadir 修改为目标地址

...
datadir=/root/.mysql/mysql
...

4、修改别名

vim /etc/apparmor.d/tunables/alias

修改为如下:

alias /var/lib/mysql/ -> /root/.mysql/mysql/,

重启服务:

sudo systemctl restart apparmor

5、重置 data 目录&重启服务

sudo mkdir /var/lib/mysql/mysql -p
sudo systemctl start mysql
sudo systemctl status mysql

至上,我们就完成了 mysql data 数据的目录迁移,再也不会因为 /root 磁盘空间而担心了。

设置 Mysql 主从

前言:
为了方便演示,咱们这里采用 docker 为 mysql 环境

1、安装 mysql

docker pull mysql
docker run --name master-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3307:3306 -d mysql:latest //主mysql
docker run --name slave-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3308:3306 -d mysql:latest //从mysql

为了方便本机演示,我们使用 3307 端口表示主服务器,3308 端口表示从服务器

2、设置主服务器

由于 docker 里没有vim,所以需要安装 vim apt update;apt install vim -y

2、1 设置服务 id 和开启日志
进入 docker 容器内 docker exec -it xxx /bin/bash

vim /etc/mysql/my.cnf

[mysqld]
server-id=100  # server 的id
log-bin=mysql-bin # log 文件名

修改完成后重启 mysql 服务,docker 容器可以直接重启容器服务即可 docker restart master-mysql

2、2 配置同步账号

mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

上述命令中,新建了一个 slave 账号,同时允许所有ip访问

2、设置从服务器

2、1 设置从服务器配置

vim /etc/mysql/my.cnf

[mysqld]
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin 

上述配置中还可以设置需要同步的数据库、表,或忽略的数据库、表。

2、2 设置从数据账号

master-mysql:

mysql> show master status;

返回值中有 Position 需要将该值记下

获取 master 的ip:

docker inspect --format='{{.NetworkSettings.IPAddress}}' master-mysql

# 172.17.0.2

slave-mysql:

mysql> change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= "此处填写在 master 中的 Position 值", master_connect_retry=30;

2、3 开启同步&查看同步状态

开启同步:

mysql> start slave;

查看同步状态:

mysql> show slave status \G;

主要看:Slave_IO_RunningSlave_SQL_Running,当出现问题时,可看 Slave_SQL_Running_State 具体错误解决

mysql> slave stop;

参考地址:
基于Docker的Mysql主从复制搭建
mysql设置主从同步

可能遇到问题:
MySQL主从同步异常问题解决Client requested master to start replication from position > file size

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值