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