前提说明:
该步骤基于centos7.6 mysql基于5.7.22,不保证其他版本一定通用,如果主库已经有数据,需要先将主库备份,并且暂停主库的数据写入,避免从库和主库产生数据差异。
操作步骤:
0.备份主库
#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
BACKUP_DIR=/deploy/script/backup/mysql_backup
DB_LIST=$(mysql -p${mysqlPass} -s -e "show databases;" 2>/dev/null |egrep -v "Database|information_schema|mysql|performance_schema|sys")
for DB in $DB_LIST; do
DBNAME=$(echo ${DB} | sed s'/\r//')
BACKUP_DB_DIR=$BACKUP_DIR/${DBNAME}_${DATE}
[ ! -d $BACKUP_DB_DIR ] && mkdir -p $BACKUP_DB_DIR &>/dev/null
BACKUP_NAME=$BACKUP_DB_DIR/DB.sql
if ! `mysqldump -p${mysqlPass} $DBNAME > $DBNAME".sql" 2>/dev/null`; then
echo "$BACKUP_NAME 备份失败!"
fi
done
1. 基于5.7.22 的tar包安装mysql从库,安装完成后记得授权远程链接的权限,修改root的密码
#检查是否有旧数据库存在进行卸载
sudo rpm -qa|grep mariadb
sudo rpm -e --nodeps mariadb-libs-5.5.60-1.el7_5.x86_64
sudo rm /etc/my.cnf
#创建用户及目录
sudo groupadd mysql
sudo useradd -g mysql mysql
sudo passwd mysql
sudo chown -R mysql mysql
sudo chgrp -R mysql mysql
sudo mkdir data
sudo chown -R mysql:mysql data
/etc 下创建my.cnf,最好是将主库的配置复制过来,保证两边配置同步,然后只修改server_id即可
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
skip-name-resolve
skip-grant-tables
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
#安装
bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/data/
sudo cp ./support-files/mysql.server /etc/init.d/mysqld
sudo chown 777 /etc/my.cnf
sudo chmod +x /etc/init.d/mysqld
#加入系统托管
sudo chkconfig --level 35 mysqld on
sudo chkconfig --list mysqld
sudo chmod +x /etc/rc.d/init.d/mysqld
sudo chkconfig --add mysqld
sudo chkconfig --list mysqld
sudo service mysqld status
#设置环境变量
sudo vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
2. 查看主库status,记录截图中的这这两个数据,如果主库未开启binlog需要将主库的binlog开启
show master status;
3. 从库执行以下命令
#从库配置
master_host='172.19.69.129', #主库ip
master_port=30306, #主库对外映射的端口
master_user='root', #主库用户,不推荐root,自己创建专用账户
master_password='cB1OHSvbogQ0oMXtZ5ObuPsg', #主库用户密码
master_log_file='mysql-bin.000010', #上述命令查到的数据值
master_log_pos=787070364; #上述命令查到的数据值
start slave; #配置好之后执行该命令开启同步
4. 验证
从库执行以下命令看到截图中的字段,证明开启同步成功,可以去主库插入数据进行测试
show slave status;
5. 将导出的主库数据导入从库
mysql -p${mysqlPass} -s -e "source /tmp/xxx.sql;"