以前总结过一次mysql的安装!好久没有安装,有些生疏,并且这次好好总结一下,安装的步骤和遇到的问题!希望能帮助别人,也自己备份一下!这次安装也尝试了一下使用编译包安装,个人感觉能不用那种方式安装就别用!这次安装也是为了主从复制数据库!所以准备两台服务器!
1.查看MySQL是否安装
rpm -qa|grep mysql
查找mysql残留包,有则删除,没有则忽略
find /-name mysql
2.确保以下所需系统软件包已经被安装 安装相关依赖
gcc gcc-c++ autoconf automake zlib libxml ncurses-devel libgcrypt libtool cmake bison-devel numactl libaio
3.安装前的系统设置
创建用户和用户组
groupadd mysql
useradd -s /sbin/nologin -g mysql -M mysql
更改文件夹所属(mysql为安装解压后的文件)
这里个人用的(mysql-8.0.15-linux-glibc2.12-x86_64.tar.xz)版本的,
还是那句话,能不用 这种mysql-8.0.15.tar.gz非编译后的,就尽量别用!
chown -R mysql.mysql /opt/mysql/
创建mysql相关目录
mkdir -p /opt/mysql/{data,logs,tmp}
赋予目录权限
chown mysql:mysql -R /opt/mysql/data
。。。。。。
4.在/etc下创建文件my.cnf:
[client]
port=3306
socket=/opt/mysql/tmp/mysql.sock
[mysqld]
user=mysql
basedir=/opt/mysql
datadir=/opt/mysql/data
port=3306
socket=/opt/mysql/mysql.sock
pid-file=/opt/mysql/mysqld.pid
tmpdir=/opt/mysql/tmp
skip_name_resolve=1
symbolic-links=0
max_connections=2000
group_concat_max_len=1024000
#sql_mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1
log_timestamps=SYSTEM
character-set-server=utf8
interactive_timeout=1800
wait_timeout=1800
max_allowed_packet=32M
binlog_cache_size=4M
sort_buffer_size=2M
read_buffer_size=4M
join_buffer_size=4M
tmp_table_size=96M
max_heap_table_size=96M
max_length_for_sort_data=8096
#默认 用 加密
default_authentication_plugin=mysql_native_password
#logs
server-id=1003306
log-error=/opt/mysql/logs/error.log
slow_query_log=1
slow_query_log_file=/opt/mysql/logs/slow.log
long_query_time=3
log-bin=/opt/mysql/logs/binlog
binlog_format=row
expire_logs_days=15
log_bin_trust_function_creators=1
relay-log=/opt/mysql/logs/relay-bin
relay-log-recovery=1
relay_log_purge=1
#innodb
innodb_file_per_table=1
innodb_log_buffer_size=16M
innodb_log_file_size=256M
innodb_log_files_in_group=2
innodb_io_capacity=2000
innodb_io_capacity_max=4000
innodb_flush_neighbors=0
innodb_flush_method=O_DIRECT
innodb_autoinc_lock_mode=2
innodb_read_io_threads=8
innodb_write_io_threads=8
innodb_buffer_pool_size=2G
5.初始化mysql
./mysqld --initialize --user=mysql --basedir=/opt/mysql --datadir=/opt/mysql/data
在初始化的过程中一定要结合这error.log日志文件进行处理!
在初始化的过程中遇到的问题总结:
1.初始化这里你可以自己指定 my.cnf配置文件的位置,只是在初始化中增加 --defaults-file=指定的文件位置 即可,但是需要注意:会遇到 unknown variable 'defaults-file=*/my.cnf' 问题
解决方法:只需要调整一下初始化命令的顺序,./mysqld --defaults-file=*/my.cnf --initialize --user=mysql 。。。即可
2.Can't find error-message file '/*/**/share/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.
解决方法:将源码包里面的/mysql-5.7.22-linux-glibc2.12-x86_64/share/english/errmsg.sys复制到/*/**/share/share下即可
3./bin/mysqld: Error while setting value 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' to 'sql_mode'.
解决方法:把配置文件中的 sql_mode 注释掉
4.Could not open file '/**/logs/error.log' for error logging: Permission denied
解决方法:明显是文件权限问题,chmod -R 777 logs/
5.Newly created data directory /opt/mysql/data is unusable. You can safely remove it.
解决方法:将/opt/mysql/data删除,初始化会自动创建
当看到如下内容即:初始化安装完成:
2019-04-17T23:01:36.633013-04:00 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Ew2!OgJu3wXx(MySQL默认生成的一个密码)
2019-04-17T23:01:37.971901-04:00 0 [System] [MY-013170] [Server] /opt/mysql/mysql3306/bin/mysqld (mysqld 8.0.15) initializing of server has completed
6.将安装的mysql设置成开机启动
[root@mysql1 mysql]# cp ./support-files/mysql.server /etc/init.d/mysqld
[root@mysql1 mysql]# chown 777 /etc/my.cnf
[root@mysql1 mysql]# chmod a+x /etc/init.d/mysqld
[root@mysql1 mysql]# chkconfig --level 35 mysqld on
在 profile 中添加如下内容:
export PATH=$PATH:/opt/mysql/bin
7.修改MySQL密码
先通过无密码启动
[root@localhost bin]# ./mysqld_safe --skip-grant-tables &
看看创建了那些数据库
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
使用 mysql 数据库
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
修改密码
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'xcl!0615';
这里要注意一下:mysql8使用的加密方式
可以查看一下user表的信息:select * from user;
修改成远程可以通过root用户连接的话,update一下user表的host值即可:
mysql> update user set Host='%' where User='root';
Query OK, 1 row affected (0.01 sec)
然后即可用navicat测试连接了!
如果在连接过程中,连接不成功,可能是因为服务器防火墙没有打开相应端口:
firewall-cmd --zone=public--add-port=3306/tcp --permanent
到此mysql算安装完成了!
8.主从数据库的设置:
每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予 REPLICATION SLAVE 权限。
MySQL主从复制的操作过程
主服务器:
开启二进制日志
配置唯一的server-id
获得master二进制日志文件名及位置
创建一个用于slave和master通信的用户账号
#创建用户
mysql> CREATE USER 'slave'@'%' IDENTIFIED with mysql_native_password BY 'slavepass';
Query OK, 0 rows affected (0.00 sec)
#分配权限
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)
#刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
#查看master状态,记录二进制文件名(binlog.000001)和位置(845):
mysql> SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 | 845 | | | |
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
从服务器:
配置唯一的server-id my.cnf配置文件添加server-id
使用master分配的用户账号读取master二进制日志
mysql> CHANGE MASTER TO MASTER_HOST='192.168.52.140',
MASTER_USER='slave',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='binlog.000001',
MASTER_LOG_POS=845;
Query OK, 0 rows affected, 2 warnings (0.02 sec)
启用slave服务
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
查看slave状态:
mysql> show slave status\G