mysqlinstanceconfig and Disable Strict mode - mysql

I want to deploy mysql silently.
The server was installed quietly using this command line:
msiexec /i "d:\mysql-essential-5.1.34-win32.msi" INSTALLDIR="D:\mysql" DATADIR="D:\mysql_data" /qn
No problem.
After that I had to run mysqlinstanceconfig quietly too. I used the following command line:
"D:\mysql\bin\mysqlinstanceconfig.exe" -i -q ServiceName=MySQL AddBinToPath=yes ServerType=SERVER DatabaseType=MYISAM ConnectionUsage=DSS Port=3306 StrictMode=no Charset=utf8 RootPassword=mypass
Despite setting StrictMode=no (I want to disable Strict Mode), It does not worked because I have still the Strict mode enabled when I run this query on the server:
SHOW VARIABLES LIKE 'sql_mode';
I got this:
sql_mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Normally I should have:
sql_mode = ""
Is there something wrong with the mysqlinstanceconfig.exe command line ?

Related

Ubuntu Linux 18.04 WSL in Windows: MariaDB service start fails

After installing MariaDB repository configuration tool for the first time in my Linux WSL for Windows (as described in MariaDB Download Page), I executed mysql but there was a socket error. netstat -apn | grep mysql shows nothing, indicating the mysql service is stopped; sudo apt list | grep *mysql-server* shows I had successfully installed mysql-server.
However, as I tried sudo service mysql start, the command line gives:
* Starting MariaDB database server mysqld [fail]
I tried the following methods, but all failed and yielded the same answer:
Using /etc/init.d/mysql start
Removing /var/lib/mysql/ib_logfile0 and /var/lib/mysql/ib_logfile1
Upgrading access of /var/lib/mysql using chmod -R 777 /var/lib/mysql
Removing everything from /var/lib/mysql/
Changing port setting using port=1112 in /etc/my.cnf (since I have another mysql on the Windows side)
Filling in additional information in /etc/my.cnf (my configuration file was initially empty after installation, and I filled in the basedir, datadir, socket, log_error, and pid-file properties)
Trying systemctl instead of service (this failed because Linux WSL uses sysvinit instead of systemd)
How could I start my MariaDB service? Thanks
I'm able to reproduce your problem (or one that looks an awfully lot like it) on WSL1. Can you confirm that you are using WSL1?
I spun up two cloned instances (wsl --import of a clean backup) of Ubuntu 20.04 -- One on WSL1 and the other on WSL2. Unfortunately, I don't have a handy 18.04 to work with, but I'm hoping the problem is the same.
On WSL2, everything worked properly. After the installation steps (pretty much the ones you put in your comment, but for 20.04), I was able to:
sudo service mariadb start
and then sudo mysql -u root successfully.
On WSL1, however, the MariaDB installation seems to fail in a strange way. It does not create /etc/mysql/mariadb.cnf, which leads to what you saw with an empty /etc/mysql/my.cnf, since it's a symlink to mariadb.cnf.
So I created mariadb.cnf manually:
sudo vi /etc/mysql/mariadb.cnf
with the contents:
# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read.
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/
#
# This group is read both by the client and the server
# use it for options that affect everything
#
[client-server]
# Port or socket location where to connect
# port = 3306
socket = /run/mysqld/mysqld.sock
# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/
This is simply the default mariadb.cnf that was created correctly by the installation on WSL2.
Attempting to start the service then gave an error about a missing /etc/mysql/debian-start, so I repeated the same steps of copying it over:
sudo vi /etc/mysql/debian-start
With the contents:
#!/bin/bash
#
# This script is executed by "/etc/init.d/mariadb" on every (re)start.
#
# Changes to this file will be preserved when updating the Debian package.
#
# NOTE: This file is read only by the traditional SysV init script, not systemd.
#
source /usr/share/mysql/debian-start.inc.sh
# Read default/mysql first and then default/mariadb just like the init.d file does
if [ -f /etc/default/mysql ]; then
. /etc/default/mysql
fi
if [ -f /etc/default/mariadb ]; then
. /etc/default/mariadb
fi
MYSQL="/usr/bin/mysql --defaults-file=/etc/mysql/debian.cnf"
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
# Don't run full mysql_upgrade on every server restart, use --version-check to do it only once
MYUPGRADE="/usr/bin/mysql_upgrade --defaults-extra-file=/etc/mysql/debian.cnf --version-check"
MYCHECK="/usr/bin/mysqlcheck --defaults-file=/etc/mysql/debian.cnf"
MYCHECK_SUBJECT="WARNING: mysqlcheck has found corrupt tables"
MYCHECK_PARAMS="--all-databases --fast --silent"
MYCHECK_RCPT="${MYCHECK_RCPT:-root}"
## Checking for corrupt, not cleanly closed (only for MyISAM and Aria engines) and upgrade needing tables.
# The following commands should be run when the server is up but in background
# where they do not block the server start and in one shell instance so that
# they run sequentially. They are supposed not to echo anything to stdout.
# If you want to disable the check for crashed tables comment
# "check_for_crashed_tables" out.
# (There may be no output to stdout inside the background process!)
# Need to ignore SIGHUP, as otherwise a SIGHUP can sometimes abort the upgrade
# process in the middle.
trap "" SIGHUP
(
upgrade_system_tables_if_necessary;
check_root_accounts;
check_for_crashed_tables;
) >&2 &
exit 0
And then chmod 755 /etc/mysql/debian-start
After that, voila:
sudo service mariadb restart
sudo mysql -u root
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.5.8-MariaDB-1:10.5.8+maria~focal mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Given the steps you've tried so far, I'd recommend blowing away pretty much all of it to try to start over "clean":
sudo apt remove mariadb-server
sudo apt autoremove
sudo rm -rf /etc/mysql
sudo rm -rf /var/lib/mysql
sudo rm -rf /usr/lib/mysql
Then reinstall mariadb-server and follow the steps above to create the correct files.

What command does XAMPP use to start MySQL?

To start a MySQL (technically mariadb) module from the XAMPP control panel, you just click the "Start" action button. What command is being run behind the scenes for "Start"? I've tried to replicate it from the command line with a variety of commands, but I've found that the "Start" button will succeed where my command-line commands fail.
The net start and net stop commands from a command line will start and stop services including of course MySQL or MariaDB.
net start mariadb
basically
mysqld.exe --defaults-file="C:\ammpp\my.ini"
mysqld is the server command
the my.ini ist the configuration you have to check the folder
And MySQL80 is the name
see manual for more options
As the github says is the command line in the batch file xampp/mysql_start.bat `
mysql\bin\mysqld --defaults-file=mysql\bin\my.ini --standalone --console
the my.ini makes some minor changes to the default values, no trickery at all
I have no idea what trickery the XAMPP package uses, but if you want to start the mariadb service from the cmd, all you need is an elevated command prompt and the following line:
net start MariaDB
Note: my OS is Win10
A modification of nbk's answer worked for me in PowerShell:
C:\xampp\mysql\bin\mysqld.exe --defaults-file="C:\xampp\mysql\bin\my.ini" --console
This shows up as running in the XAMPP Control Panel (v3.2.4) and uses the correct port from the my.ini file (I'm using port 3308).
To stop the MySQL server, you can hit Ctrl+C, but only if the MySQL server is open with the --console param. To stop it from another terminal I've tried various shutdown commands, but none have worked for me so I've had to use the ugly command:
taskkill /FI "IMAGENAME eq mysqld.exe" /T /F
From a .bat batch file I've also found these commands useful for starting and stopping:
:: Start
start "XamppMySQLD1" powershell -NoExit -command "& 'C:\xampp\mysql\bin\mysqld.exe' --defaults-file='C:\xampp\mysql\bin\my.ini' --console" || echo ERROR && exit /b
:: Is it running? On the expected port?
tasklist | findstr /i "mysql"
netstat -ano | findstr 3308
:: Stop
taskkill /FI "WindowTitle eq XamppMySQLD*" /T /F

MariaDB configuration changes don't take effect

The server is working on CentOS 8, I'm trying to configure MariaDB by making alterations to /etc/my.cnf but then when I restart DB by doing sudo systemctl restart mariadb, the server does restart but no configuration changes get applied.
mysql > SHOW VARIABLES;
It outputs the same values. I tried to comment out the including directive #!includedir /etc/my.cnf.d and to add settings to [mysqld] and [mariadb] sections.
mysql --verbose --help says:
Default options are read from the following files in the given order:
/etc/my.cnf ~/.my.cnf.
The following groups are read: mysql client client-server client-mariadb
Check whether mysql uses the config file debugging it with strace:
sudo strace mysql
In the strace output, look for lines like:
openat(AT_FDCWD, "/etc/my.cnf", O_RDONLY|O_CLOEXEC) = ...
Make sure openat doesn't return -1. In that case check whether the file exists or mysql has enough permissions to read the file.
When adding additional configuration files, make sure that they are not writable by 'other'. Otherwise you'll have a message on mysql startup like:
Warning: World-writable config file '/etc/mysql/conf.d/myproject.cnf' is ignored
and the configuration does not get applied.

How do I enable quicker startup option -A in my.cnf?

I would like -A flag to be enabled by default. Is there a way to do this in my.cnf? I'm working on MariaDB 10.0.38
For disabling rehash just add the following line to your configuration file
[client-mariadb]
auto-rehash=0

MariaDb silent install of a msi with innosetup doesn't work

I try to install MariaDB silently with inno setup, but it doesn't install.
[Files]
Source: "mariadb-10.1.9-win32.msi"; DestDir: "{tmp}"
[Run]
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\mariadb-10.1.9-win32.msi SERVICENAME=MySQL DATADIR=C:\mydata\DB PORT=3306 UTF8=1"" /qn"
The right folder is created but only the uninstall files are put into it.
If I run this in cmd started as administrator it works and mariaDB is ready for use
msiexec.exe /i E:\Installatie\mariadb-10.1.9-win32.msi SERVICENAME=MySQL DATADIR=C:\mydata\DB PORT=3306 /qn
ps I ommited the password
I modified the files Source:
[Files]
"mariadb-10.1.9-win32.msi"; DestName: "mariadb-10.1.9-win32.msi"; DestDir: "c:\temp"
and I removed the parameters then I get the mariaDB installer. So why doesn't it work with the parameters.
I get exitcode 1619
This is my solution. In the run section put:
Filename: "msiexec.exe"; Parameters: "/i {app}\mariadb-5.2.9-win32.msi PORT=3306 PASSWORD=xxxxxx SERVICENAME=MySQL ADDLOCAL=ALL REMOVE=DEVEL,HeidiSQL INSTALLDIR=""C:\mariadb"" /L*v log.txt /qb"; WorkingDir: {app}; Flags: waituntilterminated skipifdoesntexist
The version I tried is 5 but it should work properly with 10 too.
My problem was with double quotation marks after /i and once the ones were removed, the installation was performed perfectly and silently (/ qb) and create a log.txt file for mariadb installation.
Likely explanation: When you run it as admin it runs elevated and succeeds. When you run it silently it cannot ask for elevation and fails because it requires elevated privilege, so try it by running your InnoSetup as admin.
I am on Windows 10 and it didn't work because of the {tmp}. When I use a path like c:\temp instead of {tmp} it works