Mysql 生产环境用到的技术
现在是 03-28 早上四点,刚刚结束了一波线上环境的数据库迁移,趁着热乎,把用到的技术做一个总结
设置 Mysql 数据目录
前言:
由于之前服务都是采用 AWS 的 RDS 服务,RDS 好是好,但是服务的成本过于的高,大概 1c1g 的机器一个月需要 500~1000 人民币,公司为了削减成本所以将 RDS 数据迁移到本地服务器。但是由于存储的数据有30多G,机器的 /root 目录不足以存储这么大的数据,所以需要进行 mysql 的 data 数据目录更改。
条件:
服务器:ubuntu 16.04
mysql:5.7.1
迁移步骤:
1、查看 data 目录
1 | select @@datadir; |
返回值:
1 | Output |
2、迁移现有数据
停掉当前 mysql 服务
1 | service mysql stop |
复制 mysql data 数据(实例中,将数据复制到 /root/.mysql 目录下)
1 | rsync -av /var/lib/mysql /root/.mysql |
备份原有数据
1 | mv /var/lib/mysql /var/lib/mysql.bak |
3、修改 mysql 配置
1 | vim /etc/mysql/mysql.conf.d/mysqld.cnf |
将 datadir 修改为目标地址
1 | ... |
4、修改别名
1 | vim /etc/apparmor.d/tunables/alias |
修改为如下:
1 | alias /var/lib/mysql/ -> /root/.mysql/mysql/, |
重启服务:
1 | sudo systemctl restart apparmor |
5、重置 data 目录&重启服务
1 | sudo mkdir /var/lib/mysql/mysql -p |
至上,我们就完成了 mysql data 数据的目录迁移,再也不会因为 /root 磁盘空间而担心了。
设置 Mysql 主从
前言:
为了方便演示,咱们这里采用 docker 为 mysql 环境
1、安装 mysql
1 | docker pull 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
1 | [mysqld] |
修改完成后重启 mysql 服务,docker 容器可以直接重启容器服务即可 docker restart master-mysql
2、2 配置同步账号
1 | mysql> CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; |
上述命令中,新建了一个 slave 账号,同时允许所有ip访问
2、设置从服务器
2、1 设置从服务器配置
vim /etc/mysql/my.cnf
1 | [mysqld] |
上述配置中还可以设置需要同步的数据库、表,或忽略的数据库、表。
2、2 设置从数据账号
master-mysql:
1 | mysql> show master status; |
返回值中有 Position 需要将该值记下
获取 master 的ip:
1 | docker inspect --format='{{.NetworkSettings.IPAddress}}' master-mysql |
slave-mysql:
1 | 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 开启同步&查看同步状态
开启同步:
1 | start slave; |
查看同步状态:
1 | show slave status \G; |
主要看:Slave_IO_Running 和 Slave_SQL_Running,当出现问题时,可看 Slave_SQL_Running_State 具体错误解决
1 | slave stop; |
参考地址:
基于Docker的Mysql主从复制搭建
mysql设置主从同步
可能遇到问题:
MySQL主从同步异常问题解决Client requested master to start replication from position > file size