#查询mysqlrpm -qa|grep mysqlrpm -qa|grep -i mysql#删除rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64find / -name mysqlyum -y install libaio.so.1 libgcc_s.so.1 libstdc++.so.6#mysql安装1.解压压缩包 tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /usr/local/software/2.修改文件夹名字 mv mysql-5.7.26-linux-glibc2.12-x86_64/ mysql3.检查并创建用户和用户组 cat /etc/group | grep mysql cat /etc/passwd |grep mysql groupadd mysql useradd -r -g mysql mysql4.创建data文件夹 mkdir data5.授权目录和用户 chown -R mysql:mysql mysql/ chmod -R 755 mysql/6.安装并初始化执行下面命令之前去/etc/目录下查看是否有my.cnf配置文件,如果有,删除或者修改名字备份起来!不然会出现各种PID或者SOCK有关的问题 /usr/local/software/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/software/mysql/data --basedir=/usr/local/software/mysql7.复制启动脚本到资源目录 cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld8.增加mysqld服务控制脚本执行权限 chmod +x /etc/rc.d/init.d/mysqld9.将mysqld服务加入到系统服务 chkconfig --add mysqld10.检查mysqld服务是否已经生效 chkconfig --list mysqld11.在/etc 路径下面新增 my.cnf 文件 vim /etc/my.cnf [mysqld] basedir=/usr/local/software/mysql datadir=/usr/local/software/mysql/data socket =/var/lib/mysqld/mysql.sock character-set-server=utf8mb4 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION log-error=/var/log/ pid-file=/var/run/mysqld/mysqld.pid server-id=1 log-bin=mysql-bin log-slave-updates=1 default-storage-engine=INNODB innodb_large_prefix=on max_connections = 2000 max_connect_errors=2000 #skip-grant-tables12.授权配置文件chmod 644 /etc/my.cnf13.新建路径在步骤11里面配置了日志文件、pid文件、sock文件的路径,所以要去自己手动创建这些路径,文件不用创建,会自动生成PID路径:/var/run/mysqld/LOG路径:/var/log/SOCK路径:/var/lib/mysqld/14.授权 chown -R mysql /var/lib/mysqld chgrp -R mysql /var/lib/mysqld chown -R mysql /var/run/mysqld chgrp -R mysql /var/run/mysqld chown -R mysql /var/log chgrp -R mysql /var/log15.启动mysql service mysqld start16.查看进程配置生效 ps -ef | grep mysql17.登录mysql mysql -uroot -p 1.提示找不到mysql命令的话 ln -s /usr/local/software/mysql/bin/mysql /usr/bin 2.ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' ln -s /var/lib/mysqld/mysql.sock /tmp/18.修改root密码 flush privileges; ALTER USER 'root'@'localhost' IDENTIFIED BY 'root'; flush privileges;19.配置3306端口关闭防火墙: a. 永久性生效 开启:chkconfig iptables on 关闭:chkconfig iptables off b. 即时生效,重启后失效 开启:service iptables start 关闭:service iptables stop c.查看防火墙状态 service iptables status如果防火墙打开则配置端口,否则就不用了配置了。打开/etc/sysconfig/iptables文件,找到22端口(这个是默认配置好的),复制多一行在下面,把22改成3306就行,记住,不要复制到最后一行 service iptables restart20.测试连接 navicat 1. 1130 - Host '192.168.114.1' is not allowed to connect to this MySQL server flush privileges; GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; flush privileges; 2. 1045 - Access denied for user 'root'@'192.168.114.1' (using password:YES) flush privileges; grant all privileges on *.* to 'root'@'%' identified by 'root'; flush privileges; 备注:如果以后mysql启动失败,[root@pengyy63 ~]# service mysqld startStarting MySQL. ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid).删除 /var/run/mysqldrm -rf /var/run/mysqldmkdir /var/run/mysqldchown -R mysql /var/run/mysqldchgrp -R mysql /var/run/mysqld,如果还是不行,可以进入 /tmp 目录下 ,删除 mysql.sock mysql.sock.lock
rpm安装
1.server安装rpm -ivh mysql-community-server-5.7.26-1.el6.x86_64.rpm --force --nodeps2.client安装rpm -ivh mysql-community-client-5.7.26-1.el6.x86_64.rpm --force --nodeps3.vim my.cnf 输入任意密码登录mysql[mysqld]skip-grant-tables4.登录mysql,修改密码flush privileges;set password for root@localhost = password('root');flush privileges;5.vim /etc/my.cnf [mysqld]#skip-grant-tables6.重启mysqld服务service mysqld restart
一主多从
主从复制是指服务器分为主服务器和从服务器,主服务器负责读和写,从服务器只负责读,主从复制也叫master/slave,master是主,slave是从
主从复制原理:1.当master主服务器上的数据发生改变时,则将其改变写入 二进制日志文件 中2.slave从服务器会在一定时间间隔内对master主服务器上的二进制日志文件进行探测,探测其是否发生过改变3.如果探测到master主服务器的二进制日志文件发生改变,则开始一个 IO Thread 请求master二进制事件4.同时master 主服务器为每个 IO Thread 启动一个 dump Thread,用于向其发送二进制事件(事件即日志)5.slave从服务器将接收到的二进制事件保存到自己本地的 中继日志(Realy log) 文件中6.slave从服务器将启动 SQLThread 从中继日志文件 中读取二进制日志,在本地重放,使其数据和主服务器一致7.最后 IO Thread 和 SQL Thread 将进入睡眠状态,等待下一次被唤醒备注:主从数据库不能够实时同步,会产生毫秒级别的误差master主服务器配置: log-bin=/var/lib/mysqld/binlog server-id=1 binlog-do-db = pengyylog-bin:同步的日志路径及文件名,一定注意这个目录要是mysql有权限写入的server-id:master端的ID号;binlog-do-db:要同步的数据库名还可以设置不同步的数据库:不同步mysql库和test库binlog-ignore-db = mysql binlog-ignore-db = testslave从服务器配置: server.id=21.配置主从服务器 重启mysqld service mysqld restart 192.168.31.45(master) vim /etc/my.cnf log-bin=/var/lib/mysqld/binlog server-id=45 192.168.31.47(slave) server-id=47 192.168.31.48(slave) server-id=48 192.168.31.49(slave) server-id=492.设置主从关系 2.1设置主服务器 2.1.1在主服务器上创建有复制数据的账号并授权创建用户,每一个从服务器都需要用到一个账户名和密码来连接主服务器,可以为每一个从服务器都创建一个账户,也可以让全部服务器使用同一个账户。下面就为同一个ip网段的所有从服务器创建一个只能进行主从同步的账户。首先登陆mysql,然后创建一个用户名为 copy,密码为 123456 的账户,该账户可以被192.168.31网段下的所有ip地址使用,且该账户只能进行主从同步。grant replication slave on *.* to 'copy'@'192.168.31.%' identified by '123456'; 2.1.2建议重置一下主服务器状态 reset master可以先查看一下主服务器状态 show master status; 一般刚开始设置的是以 position 偏移量为 154 重置主服务器状态 reset master;mysql> reset master;Query OK, 0 rows affected (0.02 sec) 2.1.3在主服务器上执行命令,获取主服务器二进制文件binlog文件名及坐标(二进制文件名和坐标值会在后面用到)mysql> show master status;+---------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000001 | 154 | | | |+---------------+----------+--------------+------------------+-------------------+ 2.2设置从服务器 2.2.1重置从服务器的状态 reset slave;可以先查看一下从服务器状态 show slave status; 正常情况下是 空状态,可以不重置mysql> show slave status;Empty set (0.00 sec)--------------------------------------------------------stop slave;reset slave; 2.2.3在从服务器上指定主服务器CHANGE MASTER TO MASTER_HOST='192.168.31.45',MASTER_PORT=3306,MASTER_USER='copy',MASTER_PASSWORD='123456',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=154; MASTER_HOST='192.168.31.45' --主服务器ipMASTER_PORT=3306 --主服务器端口MASTER_USER='copy' --主服务器上配置过用来数据同步的账号MASTER_PASSWORD='123456', --主服务器上配置过用来数据同步的账号的密码MASTER_LOG_FILE='binlog.000001' --二进制文件MASTER_LOG_POS=154 --偏移量 2.2.4查看从服务器状态 show slave status \G; 2.2.5在从服务器上执行开始复制命令 start slave; 2.3主从验证 2.3.1 show slave status \G; Slave_IO_Running: No Slave_SQL_Running: Yes问题:在进行从服务器安装mysql时,直接将虚拟机克隆 ,导致 auto.cnf 中的 server-uuid 一致所以修改 uuid进入mysql select uuid();mysql> select uuid();+--------------------------------------+| uuid() |+--------------------------------------+| ca8f7a58-77f9-11e9-a69c-0050562fa741 |+--------------------------------------+vim auto.cnf[auto]server-uuid=ca8f7a58-77f9-11e9-a69c-0050562fa741重启 mysqld 服务 service mysqld restart Slave_IO_Running: Yes Slave_SQL_Running: Yes
双主双从
1.配置主从服务器 重启mysqld service mysqld restart 192.168.31.45(master) vim /etc/my.cnf log-bin=/var/lib/mysqld/binlog server-id=45 192.168.31.46(master) log-bin=/var/lib/mysqld/binlog server-id=46 192.168.31.47(slave) server-id=47 192.168.31.48(slave) server-id=48 192.168.31.49(slave) server-id=492.设置主从关系 2.1设置主服务器 2.1.1在主服务器上创建有复制数据的账号并授权创建用户,每一个从服务器都需要用到一个账户名和密码来连接主服务器,可以为每一个从服务器都创建一个账户,也可以让全部服务器使用同一个账户。下面就为同一个ip网段的所有从服务器创建一个只能进行主从同步的账户。首先登陆mysql,然后创建一个用户名为 copy,密码为 123456 的账户,该账户可以被192.168.31网段下的所有ip地址使用,且该账户只能进行主从同步。grant replication slave on *.* to 'copy'@'192.168.31.%' identified by '123456';grant replication slave on *.* to 'copy'@'%' identified by '123456'; 2.1.2在主服务器上编辑 my.cnf 在(45)编辑 vim my.cnf 增加以下四行 auto_increment_increment = 2 auto_increment_offset = 1 log-slave-updates sync_binlog=1 在(46)编辑 vim my.cnf 增加以下四行 auto_increment_increment = 2 auto_increment_offset = 2 log-slave-updates sync_binlog=1 2.2设置服务器状态(45、46互为主从服务器,45为主,46则是45的从;46为主,45则为46的从) 2.2.1登录45服务器,查看主服务器状态,有必要进行重置mysql> show master status;+---------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000003 | 154 | | | |+---------------+----------+--------------+------------------+-------------------+mysql> reset master;Query OK, 0 rows affected (0.02 sec)mysql> show master status;+---------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000001 | 154 | | | |+---------------+----------+--------------+------------------+-------------------+ 2.2.2登录46服务器查看主状态ysql> show master status;+---------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000003 | 599 | | | |+---------------+----------+--------------+------------------+-------------------+mysql> reset master;Query OK, 0 rows affected (0.01 sec)mysql> show master status;+---------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000001 | 154 | | | |+---------------+----------+--------------+------------------+-------------------+ 2.2.3设置主从192.168.31.45(master) ----> 192.168.31.47(slave)192.168.31.46(master) ----> 192.168.31.48(slave)45 、46 互为主从 ===========================>>>>>>>>>>>>>>>>>>>>>>>>>>>>192.168.31.45(master) ----> 192.168.31.46(slave) 192.168.31.47(slave) CHANGE MASTER TO MASTER_HOST='192.168.31.45',MASTER_PORT=3306,MASTER_USER='copy',MASTER_PASSWORD='123456',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=154; 192.168.31.46(master) ----> 192.168.31.45(slave) 192.168.31.48(slave) CHANGE MASTER TO MASTER_HOST='192.168.31.46',MASTER_PORT=3306,MASTER_USER='copy',MASTER_PASSWORD='123456',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=154; 2.2.4开始复制 start slave;-------------------------------------------------------- 2.3主从验证 2.3.1 show slave status \G; Slave_IO_Running: Yes Slave_SQL_Running: Yes