前两天装ARCH被工控机主板(硬件)坑了一把。
这两天搞MYSQL8又差点被搞疯。
1,安装
---------------------官方手册的安装说明---------------------
#mv mysql-8-0.xxxx /usr/local/mysql //将下载的集合包解压到/usr/local/mysql下
#cd /usr/local/mysql //转到mysql目录下
#mkdir data //创建数据库文件目录 官方建议权限750
#chown mysql:mysql data //赋予mysql用户所属权限
#groupadd mysql //创建 mysql 用户组
#useradd -M -r -g mysql //创建mysql 不创建用户目录,用户归属于mysql组
#pacman -S libaio //安装依赖包
#pacman -S numactl //安装依赖包
#bin/mysqld --initialize-insecure --user=mysql //空密码初始化
#bin/mysql_ssl_rsa_setup //安装ssl加密文件
#bin/mysqld_safe --user=mysql & //启动mysql
默认路径--basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
正常顺利的情况下,由于是空密码,所以执行mysql -u root 就可以直接进入数据库了.
2,自定义配置mysql服务器参数
#vim /etc/my.cnf
--------------------------------
##下面是配置文件肉容##
--------------------------------
[mysqld]
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
pid-file = /usr/local/mysql/data/mysqld.pid
bind-address = 0.0.0.0 //开启IPV4监听
socket = /var/tmp/mysql.sock
init-connect='SET NAMES UTF8MB4'
character-set-server = UTF8MB4
lower_case_table_names = 0
default_authentication_plugin=mysql_native_password
back_log = 1024
max_connections = 512
max_connect_errors = 10000
expire_logs_days = 30
max_allowed_packet = 16M
binlog_cache_size = 5M
max_heap_table_size = 32M
tmp_table_size = 32M
sort_buffer_size = 8M
join_buffer_size = 8M
ft_min_word_len = 4
thread_stack = 254K
thread_cache_size = 10
log-bin=master-bin
binlog-format=ROW
log-error=/var/log/mysqld_err.log
slow_query_log = 1
slow-query-log-file = /var/log/mysql_slow.log
long_query_time = 1
server-id = 1
replicate-ignore-db=test
replicate-wild-ignore-table=test.%
replicate-ignore-db=mysql
replicate-wild-ignore-table=mysql.%
skip-slave-start
log_slave_updates
wait_timeout = 28800
interactive_timeout = 28800
skip-name-resolve=1
skip-external-locking
default-storage-engine = InnoDB
transaction_isolation = REPEATABLE-READ
innodb_buffer_pool_size = 32M
innodb_strict_mode = 1
innodb_file_per_table = 1
innodb-open-files = 512
innodb_write_io_threads=4
innodb_read_io_threads=4
innodb_thread_concurrency = 0
innodb_io_capacity=1000
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 2M
innodb_log_file_size = 16M
innodb_log_files_in_group = 3
innodb_adaptive_flushing = 1
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
innodb_fast_shutdown = 0
innodb_flush_method = O_DIRECT
innodb_stats_on_metadata = 0
innodb_buffer_pool_instances = 8
sysdate-is-now
performance_schema
auto_increment_offset=1
auto_increment_increment=2
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
default-character-set=UTF8MB4
pager=more
no-auto-rehash
socket = /var/tmp/mysql.sock
[myisamchk]
key_buffer = 16M
sort_buffer_size = 16M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout=28800
[mysqld_safe]
open-files-limit =1024
user = mysql
[clinet]
port = 3306
socket = /var/tmp/mysql.sock
default-character-set=UTF8MB4
当这一切都配置好了,最后就可以使用support-files/mysql.server脚本来启动了.
#usr/local/mysql/support-file/mysql.server start //restart /stop 一共三个参数可用
安装过程中需注意一些目录权限问题,尤其是日志及pid存放文件夹的权限.
最后一步,也就是遇到巨坑的一步,当我把mysql.server 脚本加入到系服务启动后,一切都变得鬼异起来.之前好好的数据库突然就连接不上了.
[root@archlinux ~]# mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/tmp/mysql.sock'
#ps -A|grep mysql //检查MYSQL服务明明mysqld/mysqld_safe两个进程都已经启动了
最先开始怀疑自己密码记错了,但怎么尝试都不行,顺便说一下,mysql8丢失密码的解决办法我还没找到.虽然可以使用#mysqld_safe --skip-grant-tables & 跳过验证,然后用空密码进入,但进去后没有权限进行增删改操作,所以......
最后不得已,重新初始化了一下初据库,刚开始一切很正常,可以连接了,我开心的相当然以为我之前就是密码输错了.
然而当我改完密码,又重新用新密码"111111"确认连接成功后,我放心的重启了一下系统,然后发现,又TM连不上了......瞬间石化,好在这下可以排除密码不对这一项了.
于是上网查资料,翻手册,从改配置(my.cnf),到更改数据库的密码加密方式,再到连接方式,甚至最后都开始怀疑这个版本数据库不稳定了,吓得我都对mysql失去信心了.有那么一会儿我都怀疑上硬件了...
好在苍天有眼,经过了两天的折磨后,总于在又一次初始化完后让我抓住了关键点:
即我初始化完是手动执行mysql.server 启动,然后连接正常.
当我配置好后,将mysql.server脚本 引入mysql.service 服务中:
mysql.service文件内容:
[Unit]
Description="Mysql"
After=network.target
[Service]
Type=forking
ExecStart=/usr/local/mysql/mysql.server start
ExecReload=/usr/local/mysql/mysql.server restart
ExecStop=/usr/local/mysql/mysql.server stop
PrivateTmp=true
TimeoutSec=0
[Install]
在将其加入系统服务中
#systemctl enable mysql //加入系统服务
#systemctl start mysql //启动
#mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/tmp/mysql.sock'
最终确定问题出在系统服务启动mysql.server脚本导致无法连接的问题.
虽然尝试过自己写脚本封装mysql.server/mysqld_safe 但都无法加入系统服务启动.
暂时还没有想到好的解决方案,等过两天试试Redhat/Ubuntu看看有没有问题.