ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL源码包安装主从备份

2021-09-30 17:33:26  阅读:136  来源: 互联网

标签:slave MySQL 源码 master user mysql test local 主从


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> 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; #开始同步

表不存在

解决方法:

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  #导入数据库

主键异常

解决方法:

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状态

标签:slave,MySQL,源码,master,user,mysql,test,local,主从
来源: https://www.cnblogs.com/gkmin/p/15357694.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有