Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use of uninitialized value $mysqllogin in concatenation (.) or string at mysqltuner.pl line 6356 #490

Open
maszaa opened this issue Apr 6, 2020 · 3 comments

Comments

@maszaa
Copy link

maszaa commented Apr 6, 2020

I'm trying to run the tuner against MariaDB 10.3 hosted and managed by Microsoft Azure. SSL enforcement is enabled.

The command I'm using looks like this:
perl mysqltuner.pl --host <instance>.mariadb.database.azure.com --user <username>@<instance> --pass '<password>' --ssl-ca <certpath> --forcemem 10000

I've also tried --userenv and --passenv env variables, and providing host, user and pass with and without single and double quotes, and explicitly providing the port. No matter what I try I always get the following error

 >>  MySQLTuner 1.7.19 - Major Hayden <major@mhtx.net>
 >>  Bug reports, feature requests, and downloads at http://mysqltuner.com/
 >>  Run with '--help' for additional options and output filtering

[--] Skipped version check for MySQLTuner script
[--] Performing tests on <host>:<port>
[--] Will connect using ssl public key passed on the command line
Use of uninitialized value $mysqllogin in concatenation (.) or string at
	mysqltuner.pl line 6356 (#1)
    (W uninitialized) An undefined value was used as if it were already
    defined.  It was interpreted as a "" or a 0, but maybe it was a mistake.
    To suppress this warning assign a defined value to your variables.
    
    To help you figure out what was undefined, perl will try to tell you
    the name of the variable (if any) that was undefined.  In some cases
    it cannot do this, so it also tells you what operation you used the
    undefined value in.  Note, however, that perl optimizes your program
    anid the operation displayed in the warning may not necessarily appear
    literally in your program.  For example, "that $foo" is usually
    optimized into "that " . $foo, and the warning will refer to the
    concatenation (.) operator, even though there is no . in
    your program.
    
Use of uninitialized value $mysqllogin in concatenation (.) or string at
	mysqltuner.pl line 6357 (#1)
[--] Assuming 10000 MB of physical memory
[!!] Assuming 0 MB of swap space (use --forceswap to specify)
Use of uninitialized value $mysqllogin in concatenation (.) or string at
	mysqltuner.pl line 989 (#1)
[!!] failed to execute: SELECT VERSION()
[!!] FAIL Execute SQL / return code: 256
Use of uninitialized value $mysqllogin in concatenation (.) or string at
	mysqltuner.pl line 994 (#1)
Use of uninitialized value $mysqllogin in concatenation (.) or string at
	mysqltuner.pl line 995 (#1)
[!!] You probably did not get enough privileges for running MySQLTuner ...

What is wrong? I am using the admin user account created when I deployed the database. I can connect to the database via mysql client.

When I use --debug I also get
[DG] ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) though I've specified a host. I also tried using a different socket (--socket /tmp/mariadb.sock) but that didn't help.

@jmrenouard
Copy link
Collaborator

Hi @maszaa
Azure DB is not supported and help is welcome.

@tomolimo
Copy link

tomolimo commented Jan 7, 2022

Hello
I got the same error messages...

My DB server is MySQL on a virtual server, which is hosted on VMC cloud.

Thank you,
Regards,
Tomolimo

@gdaszuta
Copy link

As I can see, there is an issue with ssl connections – there is only one param --ssl-ca – this might cause an issue with mariadb client which is shipped now by default in debian and ubuntu instead of mysql.

Also, I am struggling a little bit to understand this line: https://github.com/major/MySQLTuner-perl/blob/master/mysqltuner.pl#L771 – I hadn't touched perl for the best part of last 20 years, but doesn't that mean that setting --ssl-ca prevents authentication using credentials altogether? This would cause issues on almost all remote servers configured nowadays.

As I understand, what is need to be done is:
– pass ssl parameters depending on client version (whether it's mysql or mariadb) – perhaps just make --ssl[a-z-]+ params passed straight to client application?
– allow ssl to be passed with credentials

After some hacking around (commenting out return 1 in if opt{ssl-ca} and adding an extra param --ssl which is passed through to mysql and mysqladmin), mysqltuner seems to be working. I will try to prepare PR if I'll be able to find some time next couple days.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants