MySQL源码包安装主从备份

MySQL安装

安装lrzsz、unzip,上传mysql安装包到/usr/local/src,解压mysql包

groupadd mysql
useradd -M -g mysql -s /sbin/nologin mysql

安装libaio

yum install -y libaio.x86_64

删除原有my.cnf,防止报错,替换my.cnf

mv /etc/my.cnf /etc/my.cnf.bak
cp -f /usr/local/src/mysql5.7.10-glibc/my.cnf /etc/my.cnf
#sed -i '49 c\server_id=2' /etc/my.cnf  #slave修改id

创建mysql数据文件夹、同步文件夹mysqlbinloginfo

mkdir /home/mysqldata
mkdir /home/mysqlbinloginfo

解压MySQL安装包

cd /usr/local/src/mysql5.7.10-glibc
tar -xvf mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz -C /usr/local #解压到指定文件夹
mv /usr/local/mysql-5.7.10-linux-glibc2.5-x86_64 /usr/local/mysql #修改文件名

修改文件夹所属用户、所属组

chown -R mysql:mysql /usr/local/mysql/* /home/mysqldata /home/mysqlbinloginfo

修改相关文件夹权限

chmod -R 755 /home/mysqldata

安装mysql

cd /usr/local/mysql/bin
./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysqldata

加入系统服务

 #更改第47行
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
sed -i '47 c\datadir=/home/mysqldata' /etc/init.d/mysqld
echo -e "export PATH=/usr/local/mysql/bin:\$PATH" > /etc/profile.d/mysql.sh

增加系统服务

chkconfig --add mysqld && chkconfig mysqld on
systemctl start mysqld  #启动服务

初始MySQL密码写入临时变量

mima=`cat /root/.mysql_secret | sed -n '2p'`   #获取初始mysql密码
mysqlpw=123		#新root密码为123
databasename=test   #数据库名为test
user=test			#同步数据账号test
passwd=abc123		#同步数据密码abc123
cat /root/.mysql_secret | sed -n '2p'
source /etc/profile   #加载系统配置

登陆MySQL数据库并更改初始密码

mysql -uroot -p$mima --connect-expired-password -e "alter user 'test'@'localhost' identified by '${mysqlpw}';flush privileges;"   #${}使用函数方式获取变量

--------------------------至此,mysql安装完成---------------------------------------------

实现主从复制

修改主服务器/etc/my.cnf

server_id=1 #指定MySQL的id
login-bin=/home/mysqlbinloginfo/master-mysql-bin  #开启二进制日志文件

主服务器创建数据库、同步账号、密码、授权

mysql -uroot -p$mysqlpw -e "create database "$databasename";create user "$user";use mysql;grant  replication slave  on  *.*  to '$user'@'%' identified by '${passwd}';flush privileges;"

修改从服务器/etc/my.cnf

server_id=2
log-bin=/home/mysqlbinloginfo/master-mysql-bin #开启二进制日志文件
binlog_do_db=db_test#表示要同步的数据库
#binlog-ignore-db=test  #表示不同步 test 数据库
#binlog_do_db=db_test  #表示要同步的数据库

启动主从MySQL服务

systemctl start mysqld

登陆主服务MySQL

mysql -uroot -p123

创建数据库表

mysql> use test;
mysql> create table student(id int,name varchar(40),age int,PRIMARY KEY(id)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> insert into student(id,name,age) values (1,"zs",'20');

查看主服务器状态

mysql>show master status;

配置从服务器(连接master服务器)

mysql>change master to master_host='192.168.31.6',master_user='test',master_password='abc123',master_log_file='master-mysql-bin.000002',master_log_pos=154;
#master_host是主服务器的ip
#master_port=3306(这里没有配置,默认3306)
#master_user:Master 服务器授权用户,也就是 Master 前面创建的那个用户
#master_password:Master 服务器授权用户对应的密码
#master_log_file:Master binlog 文件名
#master_log_pos:Master binlog 文件中的 Postion 值
#关于position值,这里做一个说明:如果主服务器已经是有很多数据了的,那就先需要备份主服务器的数据到从服务器中,然后再使用命令show master status记录需要开始同步的位置

开始复制

从服务器执行

start slave  #停止命令是:stop slave

查看从服务器状态

show slave status\G;  #slave_io_running 及 slave_sql_running 为yes即成功

slave_io_running启动失败

GRANT REPLICATION SLAVE ON . TO 'repl'@'%' identified by '自己用户的密码';

验证主从

mysql疑难问题

无法连接master

MySQL源码包安装主从备份

解决方法,授权异常

主机

mysql> revoke all privileges on *.* from 'test'@'%'; #删除指定权限
mysql> drop user 'test'@'192.168.%';   #删除指定用户
mysql> select * from mysql.user where user='test'\G  #查看test用户拥有的权限
mysql> drop user 'test';  #删除用户
mysql> create user 'test'@'%' identified by 'abc123'; #创建账号赋予密码
mysql> grant replication slave on *.* to 'test'@'%'; #授权所有数据库权限
mysql> flush privileges; #刷新配置

#replication slave  all privileges只能授权所有数据库,授权单独数据库会出现权限不够,无法获取schema等数据库日志信息
#可以通过配置/etc/my.cnf文件binlog-ignore-db=mysql指定不同步mysql,或者binlog-do-db=test指定只同步test数据库

从机

mysql> stop slave; #停止复制
mysql> change master to master_host='192.168.31.6',master_user='test',master_password='abc123',master_log_file='master-mysql-bin.000001',master_log_poss=154; #重新连接master
mysql> start slave; #开始同步

表不存在

MySQL源码包安装主从备份

解决方法:

master

[root@localhost ~]# mysqldump -uroot -p123 --all-databases > 2021.5.25.sql #备份数据库
[root@localhost ~]# scp 2021.5.25.sql root@192.168.31.7: #拷贝数据库到从服务器

slave

[root@localhost bin]#mv ~/2021.5.25.sql /usr/local/src/
[root@localhost bin]# cd /usr/local/src/	
[root@localhost src]# mysql -uroot -p123 <  2021.5.25.sql  #导入数据库

主键异常

MySQL源码包安装主从备份

解决方法:

master

mysql> show binary logs;  #存储数据的操作日志位置
mysql> purge binary logs to 'master-mysql-bin.000003';  #删除多余binlog文件
mysql> reset master; #重置master

slave

mysql> stop slave; #停止同步
mysql> change master to master_host='192.168.31.6',master_user='test',master_password='abc123',master_log_file='master-mysql-bin.000001',master_log_poss=154; #重新连接master
mysql> start slave; #开启同步
mysql> show slave status\G #查看slave状态
上一篇:Pandas实战-筛选DataFrame


下一篇:UVA540 团体队列 Team Queue 题解